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放在同一列中的唯一方法。