Pandas合并5个csv文件,只有1个不同的列名

时间:2016-09-04 10:24:34

标签: python csv pandas merge

我有5个csv文件,我正在尝试使用Python Pandas进行合并,我也正在运行64位Python导致内存问题。

所有5个csv文件都具有相同的列名: ['A', 'B', 'C', ... 'Start_time', 'end_time', 'Unique_column']

此处 Unique_column 是每个CSV文件的不同列名。所以我需要将所有5个文件相互合并,所以最后我将把DataFrame作为

['A', 'B', 'C', ... 'Start_time', 'end_time', 'Unique_column1', 'Unique_colum2', ... 'Unique_colum5']

pandas.merge还是pandas.concat方法?

更新

>>> import os
>>> import glob
>>> import numpy as np
>>> import pandas as pd
>>> dir_name = r'C:\Users\data'
>>> dfs = []
>>> files = glob.glob(os.path.join(dir_name, '*.csv'))
>>> for f in files:
...   df = pd.read_csv(f)
...   dfs.append(df)
...
>>> common_cols = ['Target', 'POS', 'Start_Week', 'End_Week', 'Measure_Metric']
>>> res = pd.concat([df.set_index(common_cols) for df in dfs], axis=1).reset_index()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "c:\Python27x64\lib\site-packages\pandas\tools\merge.py", line 846, in concat
    return op.get_result()
  File "c:\Python27x64\lib\site-packages\pandas\tools\merge.py", line 1031, in get_result
    indexers[ax] = obj_labels.reindex(new_labels)[1]
  File "c:\Python27x64\lib\site-packages\pandas\indexes\multi.py", line 1422, in reindex
    raise Exception("cannot handle a non-unique multi-index!")
Exception: cannot handle a non-unique multi-index!
>>>

2 个答案:

答案 0 :(得分:1)

IIUC,在将每个列的索引设置为所有公共列之后使用pd.concat

想象一下,您已将所有文件导入列表dfs

dfs = [df1, df2, df3, df4, df5]

然后像

那样结束
common_cols = ['A', 'B', 'C', 'Start_time', 'end_time']
pd.concat([df.set_index(common_cols) for df in dfs], axis=1).reset_index()

答案 1 :(得分:0)

你可以做到

df_master['unique1'] = df_reference1['unique1']

这将创建新行&#39; unique1&#39;。看你的索引!