【问题标题】:Missing values in Pandas DataFrame are always empty when written to CSV写入 CSV 时,Pandas DataFrame 中的缺失值始终为空
【发布时间】:2020-03-05 11:52:29
【问题描述】:

对于这个例子,我使用的是 pandas 的 1.0.1 版本。

我有一个混合类型和一些缺失值的 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)

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    没有特定的 CSV 格式来指定值应该是什么。有几个约定,但最终取决于之后将使用 csv 的程序。

    因此,在导出之前,您应该使用 Pandas fillna 函数为每种数据类型提供所需的内容。

    【讨论】:

      【解决方案2】:

      试试这个:

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

      【讨论】:

      • 谢谢!这样做的问题是它用相同的值填充每一列的缺失值。
      【解决方案3】:

      你可以对特定的列使用fillna()来得到你想要的值。例如

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

      【讨论】:

        猜你喜欢
        • 2014-02-07
        • 2013-05-31
        • 1970-01-01
        • 2016-08-04
        • 1970-01-01
        • 2019-07-17
        • 1970-01-01
        相关资源
        最近更新 更多