У меня есть два dataframes df1 и df2, которые выглядят следующим образом:
#df1
counts freqs
categories
automatic 13 0.40625
manual 19 0.59375
#df2
counts freqs
categories
Straight Engine 18 0.5625
V engine 14 0.4375
Может ли кто-нибудь объяснить, почему pd.concat([df1, df2], axis = 1)
не даст мне этого:
counts freqs
categories
automatic 13 0.40625
manual 19 0.59375
Straight Engine 18 0.5625
V engine 14 0.4375
Вот что я пробовал:
1 - Использование pd.concat()
Я подозреваю, что способ, которым я создал эти фреймы данных, может быть источником проблемы. И вот как я закончил с этими конкретными кадрами данных:
# imports
import pandas as pd
from pydataset import data # pip install pydataset to get datasets from R
# load data
df_mtcars = data('mtcars')
# change dummyvariables to more describing variables:
df_mtcars['am'][df_mtcars['am'] == 0] = 'manual'
df_mtcars['am'][df_mtcars['am'] == 1] = 'automatic'
df_mtcars['vs'][df_mtcars['vs'] == 0] = 'Straight Engine'
df_mtcars['vs'][df_mtcars['vs'] == 1] = 'V engine'
# describe categorical variables
df1 = pd.Categorical(df_mtcars['am']).describe()
df2 = pd.Categorical(df_mtcars['vs']).describe()
Я понимаю, что "категории" - вот что вызывает проблемы здесь, так как df_con = pd.concat([df1, df2], axis = 1)
вызывает эту ошибку:
ТипError: категории должны соответствовать существующим категориям при добавлении
Но меня смущает, что все в порядке:
# code
df_con = pd.concat([df1, df2], axis = 1)
# output:
counts freqs counts freqs
categories
automatic 13.0 0.40625 NaN NaN
manual 19.0 0.59375 NaN NaN
Straight Engine NaN NaN 18.0 0.5625
V engine NaN NaN 14.0 0.4375
2 - Использование df.append()
вызывает ту же ошибку, что и pd.concat()
3 - Использование pd.merge()
рода работ, но я теряю индексы:
# Code
df_merge = pd.merge(df1, df2, how = 'outer')
# Output
counts freqs
0 13 0.40625
1 19 0.59375
2 18 0.56250
3 14 0.43750
3 - Использование pd.concat()
на транспонированных кадрах данных
Поскольку pd.concat()
работал с axis = 0
я думал, что смогу туда добраться с помощью транспонированных фреймов данных.
# df1.T
categories automatic manual
counts 13.00000 19.00000
freqs 0.40625 0.59375
# df2.T
categories Straight Engine V engine
counts 18.0000 14.0000
freqs 0.5625 0.4375
Но до сих пор нет успеха:
# code
df_con = pd.concat([df1.T, df2.T], axis = 1)
>>> TypeError: categories must match existing categories when appending
Кстати, на что я надеялся, вот что:
categories automatic manual Straight Engine V engine
counts 13.00000 19.00000 18.0000 14.0000
freqs 0.40625 0.59375 0.5625 0.4375
Тем не менее, работы с axis = 0
:
# code
df_con = pd.concat([df1.T, df2.T], axis = 0)
# Output
categories automatic manual Straight Engine V engine
counts 13.00000 19.00000 NaN NaN
freqs 0.40625 0.59375 NaN NaN
counts NaN NaN 18.0000 14.0000
freqs NaN NaN 0.5625 0.4375
Но это еще далеко не то, что я пытаюсь выполнить.
Теперь я думаю, что можно было бы удалить информацию о категории из df1 и df2, но я еще не смог узнать, как это сделать.
Спасибо за любые другие предложения!
попробуй это,
pd.concat([df1.reset_index(),df2.reset_index()],ignore_index=True)
Выход:
categories counts freqs
0 automatic 13 0.40625
1 manual 19 0.59375
2 Straight Engine 18 0.56250
3 V engine 14 0.43750
Чтобы получить категорию ниже, следуйте этому примеру,
pd.concat([df1.reset_index(),df2.reset_index()],ignore_index=True).set_index('categories')
Выход:
counts freqs
categories
automatic 13 0.40625
manual 19 0.59375
Straight Engine 18 0.56250
V engine 14 0.43750
для получения дополнительной информации следуйте этим документам