我是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,则会出现错误。请帮助了解如何执行此操作。
答案 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
在这里,我使用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)