为了账号安全,请及时绑定邮箱和手机立即绑定

将字典的字典转换为具有数据类型的数据框

将字典的字典转换为具有数据类型的数据框

尚方宝剑之说 2023-12-09 15:37:37
将字典字典转换为具有数据类型的数据框的首选方法是什么?我有以下类型的字典r,其中包含每个键背后的事实集import pandas as pdr = { 1:{'a':1,'b':2,'c':'b'},      2:{'d':1,'b':1,'c':'b'},      3:{'e':0} }可以通过非常简单的方式将字典的字典转换为数据框x = pd.DataFrame(r)xx.dtypes这会在原始词典词典上产生以下版本     1    2    3a    1  NaN  NaNb    2    1  NaNc    b    e  NaNd  NaN    1  NaNe  NaN  NaN  0.0以及列的以下数据类型1     object2     object3    float64dtype: object但是,我想在x. 这样做之后y = x.transpose()yy.dtypes数据的预期表示似乎以矩阵形式显示     a    b    c    d    e1    1    2    b  NaN  NaN2  NaN    1    e    1  NaN3  NaN  NaN  NaN  NaN    0但数据类型都是objecta    objectb    objectc    objectd    objecte    objectdtype: object进行从r到 的这种转换的首选方法是什么y,以便y.dtypes直接产生数据类型a    float64b    float64c    objectd    float64e    float64dtype: object类似于转换r为x?
查看完整描述

2 回答

?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

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


df = pd.DataFrame.from_dict(r, orient='index')

a    float64

b    float64

c     object

d    float64

e    float64

dtype: object


查看完整回答
反对 回复 2023-12-09
?
饮歌长啸

TA贡献1951条经验 获得超3个赞

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

>>> y.convert_dtypes().dtypes


a     Int64

b     Int64

c    string

d     Int64

e     Int64

dtype: object

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


>>> y.convert_dtypes(convert_string=False).dtypes


a     Int64

b     Int64

c    object

d     Int64

e     Int64

dtype: object

如果您有旧版本pandas,您可以使用pd.to_numeric某种循环或apply,如下所示:


>>> 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 具有混合数据类型时,我们会得到一个具有对象数据类型的转置 DataFrame:


转置混合类型 DatraFrame 将返回对象类型 DataFrame。为了完整起见,复制了他们的示例:


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

输出:


    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

因此,如果您希望进行转换,则必须包含其他命令。dtypes


查看完整回答
反对 回复 2023-12-09
  • 2 回答
  • 0 关注
  • 60 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信