【问题标题】:Writing Numpy Array with NaNs into CSV in python在 python 中将带有 NaN 的 Numpy 数组写入 CSV
【发布时间】:2019-08-11 22:07:06
【问题描述】:

我正在尝试使用 np.savetxt 将 2D numpy array 写入 csv 文件。

import numpy as np

data = np.array([[0,np.nan,2,3],[4,5,np.nan,7],[8,9,10,np.nan]])

np.savetxt("file.csv", data, delimiter=",", fmt='%.2f')

这会创建一个文件file.csv,其内容如下。

0.00,nan,2.00,3.00
4.00,5.00,nan,7.00
8.00,9.00,10.00,nan

如您所见,该文件包含nan 而不是空白。我知道 nan 不是字符串。

预期输出:

0.00,,2.00,3.00
4.00,5.00,,7.00
8.00,9.00,10.00,

使用pandas 我可以像下面这样实现。

import pandas as pd

df = pd.DataFrame(data)
df.to_csv("file1.csv", index=False)

但我暂时不使用pandas。那么使用numpy可以实现这一点吗?

【问题讨论】:

  • savetxt 所做的只是对数组的每一行进行格式化写入。 '%.2f,%.2f,...'%tuple(row)。只是基本的 python % 格式。

标签: python python-3.x csv numpy nan


【解决方案1】:

您可以使用带有na_rep 参数的pandas 来解决这个问题。例如:

df.to_csv(r'path\df.csv', sep=',', na_rep=np.NaN)

【讨论】:

    【解决方案2】:

    最直接的解决方案:

    data1 = data.astype(str)
    data1[data1=='nan'] = ''
    np.savetxt("file.csv", data1, delimiter=",", fmt="%s")
    

    【讨论】:

    • 已更新(忘记添加fmt)。
    • 我希望它不会影响将它们转换为字符串并存储它们的文件大小?
    • 该文件是一个文本文件。无论如何,Numpy 在写入所有数字之前都会将它们隐式转换为字符串。
    • 使用%s,您可以轻松控制列宽和小数精度,%.2f 格式提供的类型。
    猜你喜欢
    • 2018-03-23
    • 2012-06-07
    • 2013-06-04
    • 2019-04-09
    • 2015-08-07
    • 2019-01-29
    • 2023-03-31
    • 2016-12-30
    • 1970-01-01
    相关资源
    最近更新 更多