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

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


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


import pandas as pd


r = { 1:{'a':1,'b':2,'c':'b'},

      2:{'d':1,'b':1,'c':'b'},

      3:{'e':0} }

可以通过非常简单的方式将字典的字典转换为数据框


x = pd.DataFrame(r)

x

x.dtypes

这会在原始词典词典上产生以下版本


     1    2    3

a    1  NaN  NaN

b    2    1  NaN

c    b    e  NaN

d  NaN    1  NaN

e  NaN  NaN  0.0

以及列的以下数据类型


1     object

2     object

3    float64

dtype: object

但是,我想在x. 这样做之后


y = x.transpose()

y

y.dtypes

数据的预期表示似乎以矩阵形式显示


     a    b    c    d    e

1    1    2    b  NaN  NaN

2  NaN    1    e    1  NaN

3  NaN  NaN  NaN  NaN    0

但数据类型都是object


a    object

b    object

c    object

d    object

e    object

dtype: object

进行从r到 的这种转换的首选方法是什么y,以便y.dtypes直接产生数据类型


a    float64

b    float64

c    object

d    float64

e    float64

dtype: object

类似于转换r为x?


尚方宝剑之说
浏览 127回答 2
2回答

有只小跳蛙

只需设置正确的方向(默认为columns,您想要的index)。df = pd.DataFrame.from_dict(r, orient='index')a    float64b    float64c     objectd    float64e    float64dtype: object

饮歌长啸

在pandas>= 1.0.0 中,您可以使用.convert_dtypes():>>> y.convert_dtypes().dtypesa     Int64b     Int64c    stringd     Int64e     Int64dtype: object请注意,这使用新的pandas字符串类型,并且还将用于pd.NA缺失值。有一些参数会影响某些转换:>>> y.convert_dtypes(convert_string=False).dtypesa     Int64b     Int64c    objectd     Int64e     Int64dtype: object如果您有旧版本pandas,您可以使用pd.to_numeric某种循环或apply,如下所示:>>> y = y.apply(pd.to_numeric, errors='ignore') # for columns that fail, do nothing>>> y.dtypesa    float64b    float64c     objectd    float64e    float64dtype: 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  kids0  Alice    9.5     False     01    Bob    8.0      True     0#dtypes as expectedname         objectscore       float64employed       boolkids          int64dtype: object              0     1name      Alice   Bobscore       9.5     8employed  False  Truekids          0     0#dtypes are now object0    object1    objectdtype: object因此,如果您希望进行转换,则必须包含其他命令。dtypes
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python