Python 熊猫将空白值写入CSV

Python 熊猫将空白值写入CSV,python,pandas,Python,Pandas,我有一个如下所示的数据帧: import pandas as pd import numpy as np df = pd.DataFrame(data={'data': [4, np.nan]}) df data 0 4.0 1 NaN 这个数据帧是在解析来自不同来源的数据后生成的,有时我没有一些整型字段的值 最终,这些数据将存储在CSV中,我想将其存储为整数4和空白。我尝试过使用replace({numpy.nan:None})和replace({numpy.nan:'}),

我有一个如下所示的数据帧:

import pandas as pd
import numpy as np
df = pd.DataFrame(data={'data': [4, np.nan]})
df
   data
0   4.0
1   NaN 
这个数据帧是在解析来自不同来源的数据后生成的,有时我没有一些整型字段的值

最终,这些数据将存储在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

您可以将
dtype
指定为
int

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

data
4
""
编辑

如果需要在已创建的数据帧上指定数据类型,可以在该数据帧上使用。 如果数据帧包含NaN值,则应转换为
对象
类型:

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

df.to_csv(s, index=False, header=True)
应该按照您的期望,在CSV中为您提供4和空行。但如果你想将NaN替换为空白,我可以这样做:

>>> df.mask(df.isna(), None)
   data
0     4
1  None
您可以随意将上面的
None
替换为任何您喜欢的内容,例如,

简单

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

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

我在保存文件时没有遇到任何问题。我做了
df.to_csv('mydf.csv',index=False)
你是怎么写这个文件的?@YOLO更新了这个问题。我将此作为文件写入S3。好的,也许你应该更新问题标题,这会改变一切。你在使用boto3吗?@YLO当我对csv进行
时,我得到4.0和一个空白。这对保存到csv没有帮助。是的,保存到csv将是相同的。我不记得哪个版本的pandas不会为NaN值写空白。毕竟,pandas中缺失值的默认占位符是NaNWell。我的问题是,当我写出这个数据帧时,我不希望我的整数变成浮点:)这似乎是一个好的方向。我忽略了数据帧是使用
DataFrame.from_records
和字典列表构建的这一事实。如何在这样构造的数据帧上指定数据类型?我编辑了我的问题。好的,当您将字典列表传递给
数据帧时,您不能指定数据类型。从_records
,但您可以稍后在数据帧上更改数据类型。我尝试了
astype(int)
,但无法将NaNs转换为int,然后您可以使用
astype(object)
。这不是最健康的做法,但这是将INT和NAN放在同一列中的唯一方法。