如何检查数据框中的列是否等于Pandas中的某种数据类型?

时间:2017-07-05 19:09:03

标签: python pandas

我需要将数据类型对象的所有列转换为字符串。

为简单起见,这里是列标题:

keys= [Name, Age, Passport, Date, Location, Height]

'名称'和'位置'属于对象类型。我需要确定这些列是object类型,并将列转换为字符串。

我尝试写的循环:

while variable_1 < len(keys):
  if df[variable_1].dtypes == object:
    df[variable_1] = df[variable_1].astype(str)
    variable_1 = variable_1 + 1

这是一个明显的错误,我有点卡在语法上。

3 个答案:

答案 0 :(得分:3)

我不确定你为什么要这样做,但这是如何:

object_columns = (df.dtypes == numpy.object)
df.loc[:, object_columns] = df.loc[:, object_columns].astype(str)

如果您曾在熊猫中使用过循环,那么99%肯定会做错了。

答案 1 :(得分:2)

考虑数据框df

df = pd.DataFrame(dict(
        A=[1, 2, 3],
        B=[[1], [2], [3]],
        C=['1', '2', '3'],
        D=[1., 2., 3.]))

applymaptype一起使用,以查看每个元素的类型。

df.applymap(type)

               A               B              C                D
0  <class 'int'>  <class 'list'>  <class 'str'>  <class 'float'>
1  <class 'int'>  <class 'list'>  <class 'str'>  <class 'float'>
2  <class 'int'>  <class 'list'>  <class 'str'>  <class 'float'>

使用select_dytpes只获取object列,update更新数据框

df.update(df.select_dtypes(include=[np.object]).astype(str))

df.applymap(type)

               A              B              C                D
0  <class 'int'>  <class 'str'>  <class 'str'>  <class 'float'>
1  <class 'int'>  <class 'str'>  <class 'str'>  <class 'float'>
2  <class 'int'>  <class 'str'>  <class 'str'>  <class 'float'>

答案 2 :(得分:1)

您使用while的原因?而不是简单地使用for

for i in df.columns:
    if df[i].dtype==object:
        df[i]= df[i].astype(str)