向Pandas中的现有列添加值

qv7cva1a  于 2022-11-27  发布在  其他
关注(0)|答案(3)|浏览(179)

我循环到一个目录中的csv文件,用Pandas读取它们。对于每个csv文件,我都有一个类别和一个市场。然后我需要从数据库中获得对这个csv文件有效的类别ID和市场ID。
finalDf是一个包含所有csv文件的所有产品的 Dataframe ,我需要将当前csv文件中的数据附加到该 Dataframe 中。
使用以下方法检索当前CSV的产品列表:

df['PRODUCT']

我需要将它们附加到finalDf,我使用了:

finalDf['PRODUCT'] =  finalDf['PRODUCT'].append(df['PRODUCT'],ignore_index=True)

这看起来工作得很好,现在我必须将catid和marketid插入到finalDf的相应列中。因为catid和marketid在当前csv文件中是一致的,所以我只需要在df Dataframe 中添加尽可能多的行,这就是我试图在下面的代码中完成的工作。

finalDf = pd.DataFrame(columns=['PRODUCT', 'CAT_ID', 'MARKET_ID'])
finalDf['PRODUCT'] = finalDf.PRODUCT.astype('category')

df = pd.read_csv(filename, header=None,
                             names=['PRODUCT', 'URL_PRODUCT', 'RANK', 'URL_IMAGE', 'STARS', 'PRICE', 'NAME', 'SNAPDATE',
                                    'CATEGORY', 'MARKETPLACE', 'PARENTCAT', 'LISTTYPE', 'VERSION', 'LEVEL'], sep='\t')

finalDf['PRODUCT'] = finalDf['PRODUCT'].append(df['PRODUCT'],ignore_index=True)
# Here I have a single value to add n times, n corresponding to the number of rows in the dataframe df
catid = 2113
marketid = 13
catids = pd.Series([catid]*len(df.index))
marketids = pd.Series([marketid]*len(df.index))
finalDf['CAT_ID'] = finalDf['CAT_ID'].append(catids, ignore_index=True)
finalDf['MARKET_ID'] = finalDf['MARKET_ID'].append(marketids, ignore_index=True)

print finalDf.head()

        PRODUCT  CAT_ID  MARKET_ID
    0    ABC       NaN    NaN
    1    ABB       NaN    NaN
    2    ABE       NaN    NaN
    3    DCB       NaN    NaN
    4    EFT       NaN    NaN

如您所见,我只有NaN值而不是实际值。预期输出:

PRODUCT  CAT_ID  MARKET_ID
    0    ABC       2113    13
    1    ABB       2113    13
    2    ABE       2113    13
    3    DCB       2113    13
    4    EFT       2113    13

包含多个csv的finalDF将如下所示:

PRODUCT  CAT_ID  MARKET_ID
    0    ABC       2113    13
    1    ABB       2113    13
    2    ABE       2113    13
    3    DCB       2113    13
    4    EFT       2113    13
    5    SDD       2114    13
    6    ERT       2114    13
    7    GHJ       2114    13
    8    MOD       2114    13
    9    GTR       2114    13
   10    WLY       2114    13
   11    WLO       2115    13
   12    KOP       2115    13

你知道吗?
谢谢

ergxz8rk

ergxz8rk1#

我终于找到了解决办法,虽然不知道为什么另一个办法不起作用.但这个办法更简单:

tempDf = pd.DataFrame(columns=['PRODUCT','CAT_ID','MARKET_ID'])
tempDf['PRODUCT'] = df['PRODUCT']
tempDf['CAT_ID'] = catid
tempDf['MARKET_ID'] = 13

finalDf = pd.concat([finalDf,tempDf])
sgtfey8w

sgtfey8w2#

您实际上不需要catid和marketid:

finalDf['CAT_ID'] = catid
finalDf['MARKET_ID'] = marketid

会起作用的。
对于脚本的其余部分,我可能会以这种方式使事情简单一点:

finalDf = pd.DataFrame()
finalDf['PRODUCT'] = df['PRODUCT'].reset_index()

假设您对df的原始索引不感兴趣(如代码所暗示的)。

p4rjhz4m

p4rjhz4m3#

要添加值,还可以尝试用途:

dataframe.at[index,'column-name']='new value'

相关问题