如果我有以下CSV
"1"
"2"
"23"
我读了
names = ["nullable"]
dtype = [("nullable", 'int32')]
df = pd.read_csv(r"E:\work\nullable.csv",
names=names,
dtype=dtype,
encoding = "utf-8")
看着df.info()
:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Data columns (total 1 columns):
nullable 3 non-null int32
dtypes: int32(1)
memory usage: 140.0 bytes
None
如果我在CSV中添加""
(NaN
)并将dtype
更改为pd.Int32Dtype
,则df.info()
显示对象类型。
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4 entries, 0 to 3
Data columns (total 1 columns):
nullable 3 non-null object
dtypes: object(1)
memory usage: 160.0+ bytes
None
如果我愿意
s = pd.Series([1, 2.0, np.nan, 4.0])
s2 = s.astype('Int32')
dtype
正确填写为Int32
s2.info()
AttributeError("'Series' object has no attribute 'info'")
s2
0 1
1 2
2 NaN
3 4
dtype: Int32
这对我来说似乎是个错误。
是否有解决此问题的建议?由于我想将CSV保存为实木复合地板,但是如果我使用pd.Int32Dtype
,则该列将另存为字符串。
删除或替换NaN
并不可行。
答案 0 :(得分:0)
Pandas read_csv将“ NaN”解释为Null,但不解释为“ NAN”。您可以将“ NAN”传递给na_values参数。
df = pd.read_csv(r"E:\work\nullable.csv",
names=names,
dtype=dtype,
encoding = "utf-8",
na_values = 'NAN'
)