编辑:我误解了这个问题,
我有这样的数据:
df = pd.DataFrame({ 'val1': [5.3, np.nan, 2.0, 1.2, 5]})
print(df)
val1
0 5.3
1 NaN
2 2.0
3 1.2
4 5.0
我知道我可以使用astype((来转换列的数据类型。我知道的目标数据类型的两种可能性是:int
和pd.Int64Dtype()
。
然而,对于int
,我对NaN值有问题(我确实想保留NaN,而不是用任何其他值填充它们(:
df = df.astype({'val1': 'int'})
ValueError: Cannot convert non-finite values (NA or inf) to integer
而对于pd.Int64Dtype()
,我遇到了浮点值的问题,必须将其强制转换为int:
df = df.astype({'val1':pd.Int64Dtype()})
TypeError: cannot safely cast non-equivalent float64 to int64
如何将浮点值投射到int并保留NaN?
def cast(x):
try:
return float(x)
except ValueError:
return None
df = df.apply(cast)