对我来说有效astype http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.astype.html:
df[3] = df[3].astype(str)
for i in df[3]:
print (type(i), i)
<class 'str'> nan
<class 'str'> h
<class 'str'> m
另一种解决方案是使用keep_default_na=False
in read_csv http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html:
import pandas as pd
from pandas.compat import StringIO
temp=u"""a,b,c,NULL,d
e,f,g,h,i
j,k,l,m,n"""
#after testing replace 'StringIO(temp)' to 'filename.csv'
df = pd.read_csv(StringIO(temp), names=[0,1,2,3,4], keep_default_na=False)
print (df)
0 1 2 3 4
0 a b c NULL d
1 e f g h i
2 j k l m n
for i in df[3]:
print (type(i), i)
<class 'str'> NULL
<class 'str'> h
<class 'str'> m
那么就可以使用na_values
如果需要解析参数NaN
在数字列中,但它必须不同,例如NA
:
import pandas as pd
from pandas.compat import StringIO
temp=u"""a,b,c,NULL,1
e,f,g,h,2
j,k,l,m,NA"""
#after testing replace 'StringIO(temp)' to 'filename.csv'
df = pd.read_csv(StringIO(temp), names=[0,1,2,3,4], keep_default_na=False, na_values=['NA'])
print (df)
0 1 2 3 4
0 a b c NULL 1.0
1 e f g h 2.0
2 j k l m NaN
for i in df[3]:
print (type(i), i)
<class 'str'> NULL
<class 'str'> h
<class 'str'> m
for i in df[4]:
print (type(i), i)
<class 'numpy.float64'> 1.0
<class 'numpy.float64'> 2.0
<class 'numpy.float64'> nan