Python 在数据帧中使用替换方法时显示浮点类型
这是我的小例子。 我想把nan从“无”改为“无”。所以我用了两次Python 在数据帧中使用替换方法时显示浮点类型,python,pandas,Python,Pandas,这是我的小例子。 我想把nan从“无”改为“无”。所以我用了两次 第一个替换方法工作得很好,正如我所想,但nan在第二个替换中重生,并且由于nan,所有int都更改为float。我不知道为什么nan会重生为df.replace({'None':None},inplace=True),我如何修复它?我们可以做的是将它更改为对象 a b c 0 None None 3 1 None 5 6 2 7 8 9 a b c 0
第一个替换方法工作得很好,正如我所想,但nan在第二个替换中重生,并且由于nan,所有int都更改为float。我不知道为什么nan会重生为df.replace({'None':None},inplace=True),我如何修复它?我们可以做的是将它更改为
对象
a b c
0 None None 3
1 None 5 6
2 7 8 9
a b c
0 NaN NaN 3
1 NaN 5.0 6
2 7.0 8.0 9
听起来您希望列类型是整数而不是浮点。您可以使用0.24.0版中引入的可为空的整数数据类型
对于一个为常规整数的列,如果它获得空值,则会自动将数据类型转换为浮点数据类型。请注意,如果使用pandas可为null的整数数据类型,该列将不会变为浮点,空值将表示为pandas.NA值
阅读。中的更多信息,如果您希望在列中使用nan
值的整数,则需要使用pd.NA
nan
是一个浮点,将强制整数数组成为浮点。看看这本书
解决方案
df=pd.DataFrame(
[
[np.nan,无,3],
[np.nan,5,6],
[7, 8, 9]
],
列=['a','b','c'],
)
#将np.nan替换为pd.NA
#然后将列类型转换为Int32
df.fillna(pd.NA).astype('Int32'))
Out[11]:
a、b、c
0 3
1 5 6
2 7 8 9
如果df.replace({'None':np.nan},inplace=True)
?您需要可为空的int-dtype:df.replace({'None':None})。astype(pd.Int64Dtype())
,我可以问一下为什么要使用None而不是nan吗?在大多数情况下,NaN是指示数据帧中缺少值的最佳方式。@wwnde它不起作用。@anky我最后只使用“Int64”。谢谢您的回复!通过您的回复,我知道可为空的整数类型。谢谢即使我不使用对象类型,你的回答也会教我变量的方法。谢谢
a b c
0 None None 3
1 None 5 6
2 7 8 9
a b c
0 NaN NaN 3
1 NaN 5.0 6
2 7.0 8.0 9
out = df.replace({'None': None}).astype(object)
Out[10]:
a b c
0 NaN NaN 3
1 NaN 5 6
2 7 8 9
Out[11]:
a b c
0 <NA> <NA> 3
1 <NA> 5 6
2 7 8 9