![](/img/trans.png)
[英]How to turn a list that was made by using pandas to_dict() with orient="records" back into a csv?
[英]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}]
但隨着a
為int
,沒有鑄成浮動
目前(從Pandas版本0.18開始), df.to_dict('records')
訪問NumPy數組df.values
。 此屬性將int
列的dtype向上播放為float
以便該數組可以具有單個公共dtype。 在此之后,沒有希望返回所需的結果 - 所有的整數都已轉換為浮點數。
因此,建立在ayhan和Tom 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.