在检查第一列

时间:2017-08-31 15:32:59

标签: python database csv

我有一个从电子商店数据库导出的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. 当文件1中有一行ID = 1时,在下一个文件中有两行有5行,bID = 1,那么它会在最终文件中创建5行我希望有一行在文件编号为2的每行中具有bID = 1的多个值的行。有可能吗?

  2. 它似乎在删除一些行...不确定直到我摆脱“重复”......

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中。