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
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
添加回答
举报