簡體   English   中英

使用orient ='records'獲取python pandas to_dict但沒有浮動轉換

[英]get python pandas to_dict with orient='records' but without float cast

我有一個數據框,其中一個col int one col浮動:

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

df.dtypes
# a      int64
# b    float64
# dtype: object

我想要一個像df.to_dict(orient='records')提供的df.to_dict(orient='records')列表

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

但隨着aint ,沒有鑄成浮動

目前(從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}]

另一個可怕的解決方法是(暫時)添加一個非數字列,例如從以下開始:

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()行為類似,正如Pandas陷阱中所解釋的那樣,但除非填寫非零值, fill_value=0 ,例如fill_value=0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM