2012-11-08 4 views
1

У меня есть цикл в Python, который последовательно импортирует CSV-файлы, назначает их временному объекту DataFrame и затем пытается объединить/конкретизировать их в «master» DataFrame. Код ниже:Параметры слияния для Pandas

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) 

The MLS_Stats DF изначально пуст, что рассуждение для цикла, если, так как я не думаю, что вы можете объединить DF с пустым DF.

Для каждого слияния я хочу построить DataFrame, включив в него любые новые индексированные строки и новые столбцы, но исключая перекрывающиеся столбцы. Вышеупомянутый код в настоящее время включает перекрывающиеся столбцы с суффиксами _x и _y.

Я знаю, что должно быть что-то, что я не понимаю, потому что это не похоже на необычную ситуацию.

+0

Что ошибка вы получаете? Или проблема, с которой вы сталкиваетесь? –

+0

Он включает перекрывающиеся столбцы ... Мне интересно, если метод comnbine_first - это то, что мне нужно? – ChrisArmstrong

+0

Почему бы не составить список dataframes 'df_list = [df1, df2, df3]', а затем объединить их все в одно и то же время 'MLS_Stats = pd.concat (df_list)'? – Aman

ответ

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 
+0

Хотя кажется, что он будет работать с указанным выше кодом, я закончил использование метода «comb_first», чтобы выполнить то, что я хотел. – ChrisArmstrong

Смежные вопросы