1

CSV ファイルを順次インポートし、それらを一時的な DataFrame オブジェクトに割り当ててから、それらを「マスター」DataFrame にマージ/結合しようとする Python のループがあります。コードは以下のとおりです。

for csv_path in csv_paths:
    df = pd.read_csv(''+csv_path+'')
    df = df.set_index('Player')
    if len(MLS_Stats) == 0:
        MLS_Stats = pd.concat([MLS_Stats,df])
    else:
        MLS_Stats = pd.merge(MLS_Stats, df, how="outer",left_index=True,right_index=True)

MLS_Stats DF は最初は空です。これが if ループの理由です。DF を空の DF とマージすることはできないと思うからです。

マージごとに、一意にインデックス付けされた新しい行と新しい列を含めて DataFrame を構築しますが、重複する列は除外します。上記のコードには現在、_x および _y サフィックスが付いた重複する列が含まれています。

これは珍しい状況ではないように思えるので、私が理解していないことがあるに違いないことはわかっています。

4

1 に答える 1

0

で重複する行をフィルタリングしdrop_duplicates、まだ存在しない列のみを結合することを選択できます。

import pandas as pd
from StringIO import StringIO

data0 = """\
index,A,B
a,1,2
a,1,2
b,3,4
c,5,6
"""

data1 = """\
index,A,C
a,7,8
d,9,10
"""

df = pd.DataFrame()
columns = []
for data in [data0, data1]:
    frame= pd.read_csv(StringIO(data), index_col=0).drop_duplicates()
    frame = frame.ix[:, frame.columns - columns]
    if len(frame):
        df = df.join(frame, how='outer') if len(df) else frame

print df

結果:

        A   B   C
index
a       1   2   8
b       3   4 NaN
c       5   6 NaN
d     NaN NaN  10
于 2012-11-09T19:03:23.133 に答える