首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用数据类型将字典转换为数据格式

用数据类型将字典转换为数据格式
EN

Stack Overflow用户
提问于 2020-10-20 16:35:12
回答 2查看 1.1K关注 0票数 1

将字典字典转换为具有数据类型的数据框架的首选方法是什么?

我有以下类型的字典r,它包含每个键后面的事实集

代码语言:javascript
复制
import pandas as pd

r = { 1:{'a':1,'b':2,'c':'b'},
      2:{'d':1,'b':1,'c':'b'},
      3:{'e':0} }

将这个字典转换成数据字典可以用一种非常简单的方式完成。

代码语言:javascript
复制
x = pd.DataFrame(r)
x
x.dtypes

,它在原始字典上生成以下版本

代码语言:javascript
复制
     1    2    3
a    1  NaN  NaN
b    2    1  NaN
c    b    e  NaN
d  NaN    1  NaN
e  NaN  NaN  0.0

和下列列的数据类型

代码语言:javascript
复制
1     object
2     object
3    float64
dtype: object

但是,我希望在x上转换版本。做完之后

代码语言:javascript
复制
y = x.transpose()
y
y.dtypes

数据上的期望表示似乎是以矩阵形式显示的。

代码语言:javascript
复制
     a    b    c    d    e
1    1    2    b  NaN  NaN
2  NaN    1    e    1  NaN
3  NaN  NaN  NaN  NaN    0

但是数据类型都是object

代码语言:javascript
复制
a    object
b    object
c    object
d    object
e    object
dtype: object

r转换到y的首选方法是什么,这样y.dtypes就可以直接生成数据类型。

代码语言:javascript
复制
a    float64
b    float64
c    object
d    float64
e    float64
dtype: object

类似于将r转换为x

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-20 19:49:55

只需设置正确的方向(默认为columns,您需要index)。

代码语言:javascript
复制
df = pd.DataFrame.from_dict(r, orient='index')
代码语言:javascript
复制
a    float64
b    float64
c     object
d    float64
e    float64
dtype: object
票数 3
EN

Stack Overflow用户

发布于 2020-10-20 16:50:46

pandas >= 1.0.0中,可以使用.convert_dtypes()

代码语言:javascript
复制
>>> y.convert_dtypes().dtypes

a     Int64
b     Int64
c    string
d     Int64
e     Int64
dtype: object

请注意,这将使用新的pandas字符串类型,还将使用pd.NA来处理缺少的值。有一些参数会影响某些转换:

代码语言:javascript
复制
>>> y.convert_dtypes(convert_string=False).dtypes

a     Int64
b     Int64
c    object
d     Int64
e     Int64
dtype: object

如果您有较旧的pandas,您可以使用pd.to_numeric与某种循环或apply作为这里

代码语言:javascript
复制
>>> y = y.apply(pd.to_numeric, errors='ignore') # for columns that fail, do nothing
>>> y.dtypes

a    float64
b    float64
c     object
d    float64
e    float64
dtype: object

我看不到在没有循环的情况下对整个数据文件强制执行数字类型的方法(.astype()似乎不起作用,因为错误要么导致整个转换失败,要么被忽略,返回原始数据类型)。

我刚看到.transpose() 解决这一点的文档

当DataFrame具有混合的dtype时,我们得到一个带有对象dtype的转置DataFrame:

转换混合类型的DatraFrame返回一个对象类型的DataFrame.为了完整起见,这里是他们的例子:

代码语言:javascript
复制
d2 = {'name': ['Alice', 'Bob'],
      'score': [9.5, 8],
      'employed': [False, True],
      'kids': [0, 0]}
df2 = pd.DataFrame(data=d2)
df2_transposed = df2.transpose()

print(df2, df2.dtypes, df2_transposed, df2_transposed.dtypes, sep='\n\n')

输出:

代码语言:javascript
复制
    name  score  employed  kids
0  Alice    9.5     False     0
1    Bob    8.0      True     0

#dtypes as expected
name         object
score       float64
employed       bool
kids          int64
dtype: object

              0     1
name      Alice   Bob
score       9.5     8
employed  False  True
kids          0     0

#dtypes are now object
0    object
1    object
dtype: object

因此,如果希望转换,则必须包含附加命令。

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

https://stackoverflow.com/questions/64449526

复制
相关文章

相似问题

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