2016-09-04 22 views
1

私はPython Pandasを使用してマージしようとしている5つのcsvファイルを持っており、64ビットPythonのメモリ問題が発生しています。パンダは、1つの異なるカラム名を持つ5つのcsvファイルをマージする

全5つのCSVファイルは、同一の列名があります。 ['A', 'B', 'C', ... 'Start_time', 'end_time', 'Unique_column']ここ

Unique_columnは、CSVファイルごとに異なる列名です。だから私はそれがpandas.mergeまたはpandas.concat方法であり、最終的に私は

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

としてデータフレームを取得しますので、お互いにすべての5つのファイルをマージする必要がありますか?

UPDATE

>>> 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! 
>>> 

答えて

1

IIUC、全て共通の列であることをそれぞれのインデックスを設定した後pd.concatを使用しています。

あなたは次にリストdfs

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

にインポートしたすべてのファイルは、あなたがこの新しい行 'unique1' を作成します

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

を行うことができます

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

このエラー 'トレースバック(最後の最新の呼び出し)行き方: ファイルに ファイル ""、1行目を、 "C:\ Python27x64 \ libには\サイト - パッケージ\パンダツール\ \ merge.py" 、line 846、concat return op.get_result() ファイル "c:¥Python27x64¥lib¥site-packages¥pandas¥tools¥merge.py"、行1031、get_result indexers [ax] = obj_labels.reindex (new_labels)[1] ファイル "c:¥Python27x64¥lib¥site-packages¥pandas¥indexes¥mult​​i.py"、1422行目、再インデックス内 raise例外( "一意でない複数のインデックスを処理できません! ) 例外:一意でない複数のインデックスを処理できません! ' – Novitoll

0

ようCONCAT持って想像してみて。あなたのインデックス作成を見てください!

+0

一般的な列にインデックスを設定します。すべてのCSVファイルに表示されるすべての列。 この出力は実際には良好ですが、たとえば、最大のCSVファイルに20Mの行がある場合、出力ファイルでは約10Kですが、ほとんどの行が一致しないことがわかります。しかし、私は手動でチェックアウトしただけで、結果が意味をなさないかどうかはわかりません...まずファイルをソートしようとします – Novitoll

関連する問題