簡體   English   中英

寫入 CSV 時,Pandas DataFrame 中的缺失值始終為空

[英]Missing values in Pandas DataFrame are always empty when written to CSV

在這個例子中,我使用的是1.0.1版的 Pandas。

我有一個混合類型和一些缺失值的 DataFrame:

df = pd.DataFrame(
    [
        [1, 2.0, '2020-01-01', 'A String']
    ], columns = ['int', 'float', 'datetime', 'str']
)
df.loc[1] = [pd.NA, pd.NA, pd.NA, pd.NA]
df.datetime = pd.to_datetime(df.datetime)
print(df)
 int float datetime str 0 1 2.0 2020-01-01 A String 1 <NA> NaN NaT NaN

讓我們打印 DataFrame 的類型以確保它們符合我的預期:

print(df.dtypes)
 int object float float64 datetime datetime64[ns] str object dtype: object

現在,我想將此 DataFrame 寫入 CSV 文件:

df.to_csv('test.csv', index=False)

查看輸出 CSV,所有 NaN 值都替換為空字符串。 我想這對於字符串列來說很好,但對於intfloatdatetime列來說並不是最佳選擇。

如何獲得缺失值的列特定表示?

編輯:確實可以使用na_rep參數自動填充缺失值: df.to_csv('test.csv', na_rep='NA') 但是,它不允許特定於列的表示。

解決方案:我想到目前為止最好的解決方案是在寫入 CSV 之前使用 dict 調用fillna

df.fillna(
    {'int': '<NA>', 'float': 'NaN', 'datetime': 'NaT'}
).to_csv('test.csv', index=False)

嘗試這個:

df.to_csv('test.csv', index=False,na_rep='NA')

沒有指定值應該是什么的特定 CSV 格式。 有幾個約定,但最終取決於之后將使用 csv 的程序。

因此,在導出之前,您應該使用 Pandas fillna函數為每種數據類型提供所需的內容。

您可以對特定列使用 fillna() 以獲得您想要的值。例如

df['int column'].fillna(0)
df['string column'].fillna("NA")

暫無
暫無

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

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