让python熊猫用orient=';记录';但是没有浮雕

让python熊猫用orient=';记录';但是没有浮雕,python,pandas,Python,Pandas,我有一个一列整型一列浮动的数据帧: df # a b # 0 3 42.00 # 1 2 3.14 df.dtypes # a int64 # b float64 # dtype: object 我想要一个目录列表,就像df.to_dict(orient='records') 但是如果aasint,当前(从Pandas版本0.18开始)未铸造为float,df.to_dict('records')访问NumPy数组df.values。此属性将int列

我有一个一列整型一列浮动的数据帧:

df
#    a      b
# 0  3  42.00
# 1  2   3.14

df.dtypes
# a      int64
# b    float64
# dtype: object
我想要一个目录列表,就像
df.to_dict(orient='records')

但是如果
a
as
int
,当前(从Pandas版本0.18开始)未铸造为float

df.to_dict('records')
访问NumPy数组
df.values
。此属性将
int
列的数据类型向上转换为
float
,以便数组可以具有单个公共数据类型。在这一点之后,没有希望返回所需的结果——所有整数都已转换为浮点数

因此,相反,你可以使用列表和听写理解:

import pandas as pd

df = pd.DataFrame({'a':[3,2], 'b':[42.0,3.14]})
result = [{col:getattr(row, col) for col in df} for row in df.itertuples()]
print(result)
# [{'a': 3, 'b': 42.0}, {'a': 2, 'b': 3.1400000000000001}]

另一个可怕的解决方法是(临时)添加一个非数字列,例如,从以下开始:

df = pd.DataFrame([[1, 2.4], [3, 4.0]], columns='a b'.split())
然后
df.to_dict(orient='record')
升级为浮动,但如果您这样做:

df['foo'] = 'bar'
[{k: v for (k, v) in row.items() if k != 'foo'} for row in df.to_dict(orient='record')]
您将保留原始类型。我注意到,
df.reindex()
的行为类似,如中所述,但除非使用非零值填充,否则无法解决此问题,例如,
fill\u value=0

这是一个已知问题:
[x.\u asdict()for x in df.itertuples()]
在该页面中建议作为解决方法。
df['foo'] = 'bar'
[{k: v for (k, v) in row.items() if k != 'foo'} for row in df.to_dict(orient='record')]