熊猫将空白值写入CSV

时间:2018-12-28 17:57:28

标签: python pandas

我有一个如下所示的DataFrame:

import pandas as pd
import numpy as np
df = pd.DataFrame(data={'data': [4, np.nan]})
df
   data
0   4.0
1   NaN 

此DataFrame是在分析来自各种来源的数据后生成的,有时我没有某些整数字段的值。

最终,这些数据将存储在CSV中,我想将其存储为整数4和空白。我曾尝试使用replace({numpy.nan: None})replace({numpy.nan: ''}),但这没有帮助。

当导出为CSV时,如何确保得到整数4和空格?最终目标是使用此CSV将其加载到具有明确定义的数据类型的Redshift / Postgres中。

更新: 我该如何写这个文件?

with s3fs.open(s3_path, 'wb') as f:
        s = StringIO()
        df.to_csv(s, index=False, header=True)
        f.write(s.getvalue().encode('utf-8'))
        s = None

3 个答案:

答案 0 :(得分:1)

您可以将dtype指定为int

df = pd.DataFrame(data={'data': [4, np.nan]}, dtype=int)
df.to_csv('output.csv', index=False)

output.csv

data
4
""

编辑

如果需要在已创建的数据框中指定数据类型,则可以在数据框中使用.astype。 如果您的数据框包含NaN值,则应转换为object类型:

df['data'] = df['data'].astype(object)

答案 1 :(得分:0)

功能

df.to_csv(s, index=False, header=True)

应该按照您的期望给您CSV中的第4行和空白行。但是,如果您打算将NaN替换为空白,这就是我的方法:

>>> df.mask(df.isna(), None)
   data
0     4
1  None

可以随意将None替换为""之类的内容。

答案 2 :(得分:0)

不复杂!

df.data = df.data.fillna(' ')
df.to_csv('anyfilename.csv', sep=',')

基本上,fillna所做的是用任何所需的值(在我们的示例中为“”为空白)填充数据框“数据”列的所有NaN值。然后,我们使用to_csv方法将整个数据帧写入所需的csv文件。