Python 将np.nan转换为pd.NA
鉴于Python 将np.nan转换为pd.NA,python,pandas,nan,Python,Pandas,Nan,鉴于pd.DataFrame包含float,如何将np.nan转换为新的pd.NA格式 import numpy as np import pandas as pd df = pd.DataFrame(np.nan, index=[0, 1, 2, 3], columns=['A', 'B']) df.iloc[0, 1] = 1.5 df.iloc[3, 0] = 4.7 df = df.convert_dtypes() type(df.iloc[0, 0]) # numpy.floa
pd.DataFrame
包含float
,如何将np.nan
转换为新的pd.NA
格式
import numpy as np
import pandas as pd
df = pd.DataFrame(np.nan, index=[0, 1, 2, 3], columns=['A', 'B'])
df.iloc[0, 1] = 1.5
df.iloc[3, 0] = 4.7
df = df.convert_dtypes()
type(df.iloc[0, 0]) # numpy.float64 - I'am expecting pd.NA
当
df
包含float
时,使用pd.convert\u dtypes()
似乎不起作用。但是,当df
包含int
时,此转换工作正常。fillna是否适合您
import numpy as np
import pandas as pd
df = pd.DataFrame(np.nan, index=[0, 1, 2, 3], columns=['A', 'B'])
df.iloc[0, 1] = 1.5
df.iloc[3, 0] = 4.7
df = df.fillna(pd.NA)
df
输出:
convert\u dtypes
是您自己的函数吗?@Erfan不是,它来自pandas 1.0.0。我本以为我对pandas API了如指掌,但今天学到了一些新的东西,感谢它似乎convert\u dtypes
有参数可以使用pd.NA
支持转换字符串、整数和布尔值,但不是浮动。此解决方案的问题是,您的数据帧现在有object
dtype列,这使它们变慢。使用此解决方案,您可以获得正确的pd.NA
类型。但是,df.info()
现在将显示您的列从float64
更改为object
。那不是我要找的。整个列应该变成float64
@Andi,看起来该功能还不存在(还?)。您可以在pandas github repo上提出一个增强建议问题。速度是使用pd.NA的牺牲品。此解决方案解决了所提出的问题,因此应标记为一个问题,因为原始问题只希望使用pd.NA,而不考虑效率。此外,原始问题没有指定其他数据类型要求。
A B
0 <NA> 1.5
1 <NA> <NA>
2 <NA> <NA>
3 4.7 <NA>
type(df.iloc[0, 0])
pandas._libs.missing.NAType