我有一个从电子商店数据库导出的4个csv文件我需要按列合并它们,我可能会设法单独完成。但问题是匹配正确的列
第一档:
"ep_ID","ep_titleCS","ep_titlePL".....
"601","Kancelářská židle šedá",NULL.....
...
第二档:
"pe_photoID","pe_productID","pe_sort"
"459","603","1"
...
第三档:
"epc_productID","epc_categoryID","epc_root"
"2155","72","1"
...
第四档:
"ph_ID","ph_titleCS"...
"379","5391132275.jpg"
...
我需要匹配行,以便将具有相同“ep_ID”和“epc_productID”的行合并在一起,并将具有相同“ph_ID”,“pe_photoID”的行合并在一起。我真的不知道从哪里开始,希望,我写得可以理解
更新: 我正在使用:
files = ['produkty.csv', 'prirazenifotek.csv', 'pprirazenikategorii.csv', 'adresyfotek.csv']
dfs = []
for f in files:
df = pd.read_csv(f,low_memory=False)
dfs.append(df)
first_and_third =pd.merge(dfs[0],dfs[1],left_on = "ep_ID",right_on="pe_photoID")
first_and_third.to_csv('new_filepath.csv', index=False)
好的,这段代码可行,但它以不同于我需要的方式完成两件事:
当文件1中有一行ID = 1时,在下一个文件中有两行有5行,bID = 1,那么它会在最终文件中创建5行我希望有一行在文件编号为2的每行中具有bID = 1的多个值的行。有可能吗?
它似乎在删除一些行...不确定直到我摆脱“重复”......
答案 0 :(得分:0)
您可以使用pandas
的{{1}}方法将csv合并在一起。在您的问题中,您只提供第1和第3个文件以及第2和第4个文件之间的键。不确定你是否想要一个巨大的桌子将它们全部放在一起 - 如果是这样你需要找到另一个中间密钥,也许你没有列出(?)。
merge
如果要将数据帧保存回文件,可以这样做:
import pandas as pd
files = ['path_to_first_file.csv', 'second_file.csv', 'third_file.csv', 'fourth_file.csv']
dfs = []
for f in files:
df = pd.read_csv(f)
dfs.append(df)
first_and_third = dfs[0].merge(dfs[2], left_on='ep_ID', right_on='epc_productID', how='left')
second_and_fourth = dfs[1].merge(dfs[3], left_on='pe_photoID', right_on='ph_ID', how='left')
first_and_third.to_csv('new_filepath.csv', index=False)
假设您没有在数据框上设置索引,并且不希望数据框的行号包含在最终的csv中。