使用orient ='records'获取python pandas to_dict但没有浮动转换

use*_*834 9 python pandas

我有一个数据框,其中一个col int one col浮动:

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

df.dtypes
# a      int64
# b    float64
# dtype: object
Run Code Online (Sandbox Code Playgroud)

我想要一个像提供的那样的词典列表 df.to_dict(orient='records')

df.to_dict(orient='records')
[{'a': 3.0, 'b': 42.0}, {'a': 2.0, 'b': 3.1400000000000001}]
Run Code Online (Sandbox Code Playgroud)

但是,aas int,不是浮动的

unu*_*tbu 10

目前(从Pandas版本0.18开始),df.to_dict('records')访问NumPy阵列df.values.此属性向上转换int列的dtype ,float以便该数组可以具有单个公共dtype.在此之后,没有希望返回所需的结果 - 所有的整数都已转换为浮点数.

因此,建立在ayhanTom Augspurger的建议上,你可以使用列表和词典理解:

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}]
Run Code Online (Sandbox Code Playgroud)