#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)