Cyr*_*ANO 5 python python-2.7 pandas
我循环到一个目录中的 csv 文件并用 Pandas 读取它们。对于每个 csv 文件,我都有一个类别和一个市场。然后我需要从对这个 csv 文件有效的数据库中获取类别的 id 和市场的 id。
finalDf 是一个包含所有 csv 文件的所有产品的数据框,我需要将当前 csv 的数据附加到它。
使用以下方法检索当前 CSV 的产品列表:
df['PRODUCT']
Run Code Online (Sandbox Code Playgroud)
我需要将它们附加到 finalDf 并且我使用了:
finalDf['PRODUCT'] = finalDf['PRODUCT'].append(df['PRODUCT'],ignore_index=True)
Run Code Online (Sandbox Code Playgroud)
这似乎工作正常,我现在必须将 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
Run Code Online (Sandbox Code Playgroud)
如您所见,我只有 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
Run Code Online (Sandbox Code Playgroud)
包含几个 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
Run Code Online (Sandbox Code Playgroud)
任何的想法?
谢谢
Cyr*_*ANO 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])
Run Code Online (Sandbox Code Playgroud)