使用python熊猫合并多个csv文件

时间:2020-03-12 03:07:39

标签: python-3.x

我是python的新手,我希望合并多个csv文件。我有以下两个文件

CSV1:
startp endp slack
S1 E1 -0.15
S4 E2 -10
S3 E3 -3.2

CSV2:
startp endp slack
S1 E1 -0.12
S2 E2 -4
S3 E3 -1.2

Merged csv : i want like this
startp endp slack_csv1 slack_csv2
S1 E1 -0.15 -0.12
S4 E2 -10 
S2 E2        -4
S3 E3 -3.2 -1.2

I wrote code like this 
    for file_name in all_csv"
        df=pd.read_csv(file_name)
        if i==0"
      df_t = df
      i=1
df_t=pd.merge(df_t,df)
print("after merge", df_t,df)
第二次合并后,df_t的

输出为空。如果我尝试合并on = endp,则会出现错误。请帮助了解如何执行此操作。

1 个答案:

答案 0 :(得分:1)

注意:我假设您的CSV包含逗号,您在其中放置空格。

我不确定在"语句之后for是做什么的,但是我将其格式化为我认为您要写的内容。

您快要拥有它了。您只需要为pd.merge() function指定更多参数即可。

您可能希望更改后缀参数以接受指示它们来自哪个文件的变量(有关此问题的扩展答案,请参见下文)。

all_csv = ["csv1.csv", "csv2.csv"]
i = 0
for file_name in all_csv:
    df = pd.read_csv(file_name)
    if i == 0:
        df_t = df
        i = 1

df_t = pd.merge(df_t, df, on=['startp', 'endp'], how='outer', suffixes=('_1', '_2'))
print("after merge", df_t)

输出:

  startp endp  slack_1  slack_2
0     S1   E1       -0.15       -0.12
1     S4   E2      -10.00         NaN
2     S3   E3       -3.20       -1.20
3     S2   E2         NaN       -4.00

替代解决方案,但可以处理2个以上文件

在这里,我使用pd.DataFrame.merge()而不是pd.merge(),但是他们完成了相同的任务。在合并之前,我要重命名该列,这意味着可以合并两个以上的文件。这只是一种方式。您可以重新格式化先前的代码,以处理两个以上的文件。

df_combined = None
for csv_file in all_csv:
    df = pd.read_csv(csv_file)
    df = df.rename(columns={'slack': 'slack_' + csv_file})
    if df_combined is None:
        df_combined = df.copy()
    else:
        df_combined = df_combined.merge(df, how='outer', on=['startp', 'endp'])

print(df_combined)