在pandas中为现有的列添加值[英] Adding values to existing columns in pandas

本文是小编为大家收集整理的关于在pandas中为现有的列添加值的处理方法,想解了在pandas中为现有的列添加值的问题怎么解决?在pandas中为现有的列添加值问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我循环进入一个目录中的 csv 文件并用 pandas 读取它们.对于每个 csv 文件,我都有一个类别和一个市场.然后我需要从数据库中获取类别的 id 和市场的 id,这对于这个 csv 文件是有效的.

finalDf 是一个数据框,其中包含所有 csv 文件的所有产品,我需要在它后面附加当前 csv 的数据.

使用以下方式检索当前 CSV 的产品列表:

df['PRODUCT']

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

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

这似乎工作正常,我现在必须将 catid 和 marketid 插入到 finalDf 的相应列中.因为 catid 和 marketid 在当前的 csv 文件中是一致的,所以我只需要添加它们的时间与 df 数据框中的行数一样多,这就是我在下面的代码中想要完成的.

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

有什么想法吗?

谢谢

推荐答案

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

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])

本文地址:https://www.itbaoku.cn/post/1727807.html