Объединение нескольких фреймов данных pandas, когда столбцы не выровнены

#python #pandas

#python #pandas

Вопрос:

У меня есть 3 фрейма данных:

df1

 A B C
1 1 1
2 2 2
 

df2

 A B C
3 3 3
4 4 4
 

df3

 A B
5 5
 

Поэтому я хочу объединить все фреймы данных, чтобы они стали следующими:

 A B C
1 1 1
2 2 2
3 3 3
4 4 4
5 5 NaN
 

Я пробовал pd.concat([df1,df2,df3]) с обоими axis=0 , axis=1 но ни один из них не работает так, как ожидалось.

Комментарии:

1. Какой результат вы получаете?

Ответ №1:

 df = pd.concat([df1,df2,df3], ignore_index=True)

df.fillna("NA", inplace=True)
 

Комментарии:

1. На мой взгляд, это не очень хорошая идея df.fillna("NA", inplace=True) , потому что не удалось получить смешанные значения — числовые со строками и некоторые функции pandas.

Ответ №2:

Если есть одинаковые общие имена столбцов, работает хорошо — общие столбцы выровнены правильно:

 print (df1.columns.tolist())
['A', 'B', 'C']
print (df2.columns.tolist())
['A', 'B', 'C']
print (df3.columns.tolist())
['A', 'B']
 

Если возможно, можно ли использовать конечные пробелы str.strip :

 print (df1.columns.tolist())
['A', 'B ', 'C']

df1.columns = df1.columns.str.strip()

print (df1.columns.tolist())
['A', 'B', 'C']
 

Также параметр ignore_index=True предназначен для RangeIndex по умолчанию после concat , для предотвращения дублирования индекса и добавления параметра sort для предотвращения FutureWarning :

 df = pd.concat([df1,df2,df3], ignore_index=True, sort=True)
print (df)
   A  B    C
0  1  1  1.0
1  2  2  2.0
2  3  3  3.0
3  4  4  4.0
4  5  5  NaN
 

Ответ №3:

Я думаю, вам нужно указать concat игнорировать index :

 result = pd.concat([df1,df2,df3], ignore_index=True)