Python 保存数据帧,但保留NA值

Python 保存数据帧,但保留NA值,python,csv,pandas,nan,na,Python,Csv,Pandas,Nan,Na,我有这个密码 import pandas as pd import numpy as np import csv df = pd.DataFrame({'animal': 'cat dog cat fish dog cat cat'.split(), 'size': list('SSMMMLL'), 'weight': [8, 10, 11, 1, 20, 12, 12], 'adult' : [False

我有这个密码

import pandas as pd
import numpy as np
import csv
df = pd.DataFrame({'animal': 'cat dog cat fish dog cat cat'.split(),
               'size': list('SSMMMLL'),
               'weight': [8, 10, 11, 1, 20, 12, 12],
               'adult' : [False] * 5 + [True] * 2}); 
我用NA值改变了重量:

df['weight'] = np.nan
最后我保存了它

df.to_csv("ejemplo.csv", sep=";", decimal=",", quoting=csv.QUOTE_NONNUMERIC, index=False)
但是当我读文件时,我有“”,而不是NA 我想用NA代替Nan

我想作为输出:

adult;animal;size;weight
False;"dog";"S";NA
False;"cat";"M";NA    

如果希望字符串表示
NaN
值,则将其传递到
到\u csv

In [8]:
df.to_csv(na_rep='NA')

Out[8]:
',adult,animal,size,weight\n0,False,cat,S,NA\n1,False,dog,S,NA\n2,False,cat,M,NA\n3,False,fish,M,NA\n4,False,dog,M,NA\n5,True,cat,L,NA\n6,True,cat,L,NA\n'
如果要将
NA
置于引号中,请转义引号:

In [3]:
df = pd.DataFrame({'animal': 'cat dog cat fish dog cat cat'.split(),
               'size': list('SSMMMLL'),
               'weight': [8, 10, 11, 1, 20, 12, 12],
               'adult' : [False] * 5 + [True] * 2})
df['weight'] = np.NaN
df.to_csv(na_rep='\'NA\'')

Out[3]:
",adult,animal,size,weight\n0,False,cat,S,'NA'\n1,False,dog,S,'NA'\n2,False,cat,M,'NA'\n3,False,fish,M,'NA'\n4,False,dog,M,'NA'\n5,True,cat,L,'NA'\n6,True,cat,L,'NA'\n"
编辑

要获得所需的输出,请使用以下参数:

In [27]:
df.to_csv(na_rep='NA', sep=';', index=False,quoting=3)
​
Out[27]:
'adult;animal;size;weight\nFalse;cat;S;NA\nFalse;dog;S;NA\nFalse;cat;M;NA\nFalse;fish;M;NA\nFalse;dog;M;NA\nTrue;cat;L;NA\nTrue;cat;L;NA\n'

要获得特定的输出,必须显式地传入引号

df = pd.DataFrame({'animal': r'"cat" "dog" "cat" "fish" "dog" "cat" "cat"'.split(),
           'size': list(r'"S" "S" "M" "M" "M" "L" "L"'.split()),
           'weight': [8, 10, 11, 1, 20, 12, 12],
           'adult' : [False] * 5 + [True] * 2}); 
df['weight'] = '%s' %('NA')
df.to_csv("ejemplo.csv", sep=';', decimal=',',quoting=csv.QUOTE_NONE, index=False)

将param
na_rep
so
df.传递给_csv(“ejempo.csv”,sep=“;”,decimal=“,”,quoting=csv.QUOTE_非数字,index=False,na_rep='na')
是,但我想要不带引号的na查看我的更新答案,但我想要带引号的字符串(不是na)我想要这个输出:成人;动物大小;权重错误;“狗”;“S”;那是假的;“猫”;“M”;检查我的更新答案,也没有什么阻止你只是添加额外的参数,看看它是否做了你想要的,直到没有我想要的。。。我有一个R进程,它创建了这样的输出。。。但是当我将代码转换成python时,我没有完全相同的代码,我担心下一个过程不会给出相同的结果,这是造成这种情况的原因。我需要引号之间的字符串,数字否,空字符串=“和空数字=NA。很抱歉,除非您对csv进行后期处理,否则无法完成此操作。我找不到任何参数组合来实现您想要的输出:成人;动物大小;权重错误;“狗”;“S”;那是假的;“猫”;“M”;NA