Python 如果包含Nan,则整型变量变为浮点
虽然在操作系统中有很多讨论提到从0.24开始将Nan integer添加到Pandas中的功能,但当我使用Python 如果包含Nan,则整型变量变为浮点,python,pandas,dataframe,Python,Pandas,Dataframe,虽然在操作系统中有很多讨论提到从0.24开始将Nan integer添加到Pandas中的功能,但当我使用read_csv()读取csv文件时,它会再次将包含Nan的integer值检测为float 我是做错了什么还是这是正常的行为? 如果是这样的话,解决方法是什么? 重要的是,在我的用例中,如果您使用astype(),我可以正确地检测变量的类型 df = pd.DataFrame({"intwithnan":[random.randint(0,100)
read_csv()
读取csv文件时,它会再次将包含Nan的integer
值检测为float
我是做错了什么还是这是正常的行为?如果是这样的话,解决方法是什么?
重要的是,在我的用例中,如果您使用
astype()
,我可以正确地检测变量的类型
df = pd.DataFrame({"intwithnan":[random.randint(0,100)
if random.randint(0,3)<2 else np.nan
for i in range(20)]}).astype({"intwithnan":"Int64"})
df.to_csv("nan.csv", index=False)
df = pd.read_csv("nan.csv").astype({"intwithnan":"Int64"})
print(f"{df.dtypes}\n\n{df.to_string(index=False)}")
问题是用户可以加载不同的数据集,在其中我不知道哪些列实际上是要使用的整数
astype()
。在读取\u csv()
的过程中,将自动检测类型。是否可以强制它加载Nan值为integer而不是not的整型列float@MohamadArmoon简单正确,只需尝试每一列。用另一段代码更新了答案听起来很合理。我想可能会阻止对所有数据集进行额外的遍历。但似乎不可避免地,您可以使用df.dtypes.to_dict()
,只尝试将float64列转换为更有效的版本
intwithnan Int64
dtype: object
intwithnan
97
97
66
16
<NA>
<NA>
<NA>
59
23
<NA>
<NA>
95
61
<NA>
26
13
<NA>
48
84
19
df = pd.DataFrame({"intwithnan":[random.randint(0,100)
if random.randint(0,3)<2 else np.nan
for i in range(20)],
"stringcol":["abc" for i in range(20)]}).astype({"intwithnan":"Int64"})
df.to_csv("nan.csv", index=False)
df = pd.read_csv("nan.csv")
for c in df.columns:
try: df = df.astype({c:"Int64"})
except TypeError: pass
print(f"{df.dtypes}\n\n{df.to_string(index=False)}")