首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >尝试将数据与分类数据连接时出现意外错误

尝试将数据与分类数据连接时出现意外错误
EN

Stack Overflow用户
提问于 2018-06-21 09:53:37
回答 1查看 2.8K关注 0票数 1

我有两个数据格式: df1和df2,如下所示:

代码语言:javascript
运行
复制
#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)不给我这个答案:

代码语言:javascript
运行
复制
                    counts   freqs
categories                     
automatic               13  0.40625
manual                  19  0.59375 
Straight Engine         18  0.5625
V engine                14  0.4375

这里是我尝试过的:

1-使用pd.concat()

我怀疑我构建这些数据文件的方式可能是问题的根源。下面是我如何得到这些特定的数据文件:

代码语言:javascript
运行
复制
# 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)引发了这个错误:

TypeError:类别在追加时必须与现有类别匹配

但让我困惑的是,这没什么大不了的:

代码语言:javascript
运行
复制
# 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()是一种工作,但我正在丢失索引:

代码语言:javascript
运行
复制
# 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一起工作,我想我可以使用transposed实现它。

代码语言:javascript
运行
复制
# 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

但仍未取得成功:

代码语言:javascript
运行
复制
# code
df_con = pd.concat([df1.T, df2.T], axis = 1)

>>> TypeError: categories must match existing categories when appending

顺便说一句,我在这里希望的是:

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
# 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中的“类别”信息,但是我还没有找到如何做到这一点。

谢谢您的任何其他建议!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-21 10:23:03

尝尝这个,

代码语言:javascript
运行
复制
pd.concat([df1.reset_index(),df2.reset_index()],ignore_index=True)

输出:

代码语言:javascript
运行
复制
        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

要再次获得作为索引的类别,请遵循以下步骤,

代码语言:javascript
运行
复制
pd.concat([df1.reset_index(),df2.reset_index()],ignore_index=True).set_index('categories')

输出:

代码语言:javascript
运行
复制
                 counts    freqs
categories                      
automatic            13  0.40625
manual               19  0.59375
Straight Engine      18  0.56250
V engine             14  0.43750

有关更多详细信息,请访问这个医生

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50965581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档