熊猫read_csv dtype错误地显示了列

时间:2019-09-13 03:11:56

标签: python pandas

如果我有以下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并不可行。

1 个答案:

答案 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'
            )