1

我在 Python 中有一个循环,它依次导入 CSV 文件,将它们分配给临时 DataFrame 对象,然后尝试将它们合并/合并到“主”DataFrame。代码如下:

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 回答