Объединение двух DataFrames
У меня есть 2 DataFrames
которые я хотел бы объединить. Я посмотрел на документацию и попытался выполнить следующую операцию, но запутался в том, как это сделать. Как я уже сказал, у меня есть 2 DataFrames
:
df1:
id name type currency
0 BTA.S Applewood Hard GBp
1 VOD.S Softwood Soft GBp
а также
df2:
id
BTA.S 301.221525
VOD.S 213.791400
и я хотел бы вернуться:
id name type currency price
0 BTA.S Applewood Hard GBp 301.221525
1 VOD.S Softwood Soft GBp 213.791400
Где столбец цен из df2 объединен с df1. (Просто чтобы вы знали, что ко времени, когда я закончу, будет больше пород древесины).
Я попробовал несколько способов сделать это:
Result = df1.merge(df2[['*.S']], left_on='id', right_index=True)
где я встретил исключение:
ValueError: can not merge DataFrame with instance of type <class 'pandas.core.series.Series'>
а также
Result = pd.concat([Df1, Df2], axis=1, ignore_index=True)
где я получаю исключение:
ValueError: labels ['type'] not contained in axis
Но я запутался.
Ответы
Ответ 1
Сообщение об ошибке указывает, что df2
имеет тип pd.Series
. Вам нужно преобразовать df2
.to_frame()
, так как .merge()
нужен вход pd.DataFrame()
(см. Документы):
df1.merge(df2[['*.S']].to_frame(), left_on='id', right_index=True)
в то время как вы, вероятно, также просто могли:
df1.merge(df2.to_frame(), left_on='id', right_index=True)
В качестве альтернативы вы можете использовать pd.DataFrame.join()
, который принимает pd.Series
.
Ответ 2
Эта ошибка означает, что один из ваших объектов не a pandas Кадр данных.
ValueError: can not merge DataFrame with instance of type <class 'pandas.core.series.Series'>
Чтобы доказать это самому себе,
print(type(df2))
И это должно выводить pandas.core.series.Series
Чтобы достичь желаемого результата,
df2 = df2.to_frame().reset_index()
df2.columns = ['id', 'price']
df1.merge(df2)
Выходы:
id name type currency price
0 BTA.S Applewood Hard GBp 301.221525
1 VOD.S Softwood Soft GBp 213.791400
Ответ 3
Вы можете просто добавить df2 (который является серией, а не DataFrame) в качестве нового столбца
df['price']=df2