Python 将包含NaN的64列转换为包含整数的对象列

Python 将包含NaN的64列转换为包含整数的对象列,python,pandas,dataframe,Python,Pandas,Dataframe,正如标题所说,我有一个Pandas数据帧,它包含一个表示整数的float64。我想将其转换为使用int64,但它也包含NaN值。因此,我所能做的最好的事情就是将其转换为have typeobject,将所有非NaN值转换为整数。在不手动迭代列的情况下执行此操作的最佳方法是什么 这是必需的,因此当我使用将数据帧转换为_sql时,将使用可为空的整数类型而不是float 例如: >>> df a b 0 1 2.0 1 3 NaN 我想要的是: >>

正如标题所说,我有一个Pandas数据帧,它包含一个表示整数的
float64
。我想将其转换为使用
int64
,但它也包含
NaN
值。因此,我所能做的最好的事情就是将其转换为have type
object
,将所有非
NaN
值转换为整数。在不手动迭代列的情况下执行此操作的最佳方法是什么

这是必需的,因此当我使用
将数据帧转换为_sql
时,将使用可为空的整数类型而不是float

例如:

>>> df
   a    b
0  1  2.0
1  3  NaN
我想要的是:

>>> df
   a    b
0  1    2
1  3  NaN

尝试使用
。应用

演示:

import pandas as pd
import numpy as np
df = pd.DataFrame({"s": [2.0, np.nan]})
print(df["s"].apply(lambda x: x if np.isnan(x) else np.int64(x)))
0     2
1   NaN
Name: s, dtype: float64
输出:

import pandas as pd
import numpy as np
df = pd.DataFrame({"s": [2.0, np.nan]})
print(df["s"].apply(lambda x: x if np.isnan(x) else np.int64(x)))
0     2
1   NaN
Name: s, dtype: float64
是否尝试过?df.astype(object)
df[“b”]。astype(“int64”)
将导致
ValueError:无法将非有限值(NA或inf)转换为整数
。我可以转换为
“object”
,但我不知道如何从那里开始,而不手动迭代每个值,检查它是否等于
NaN
,并有条件地强制转换它。