我有一个如下所示的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
答案 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文件。