熊猫:将所有列从字符串转换为数字除了两个?

时间:2017-06-17 07:51:49

标签: python pandas

假设我们有

>>> df.dtype Name object Height object Weight object Age object Job object

是否有任何简单的方法可以使用.to_numeric()方法隐藏除Name和Job列之外的所有列?

我已经尝试但是它不起作用

df.iloc[df.columns != Name & df.columns != Job] = pd.to_numeric(df.iloc[df.columns != Name & df.columns != Job], errors='coerce')

2 个答案:

答案 0 :(得分:3)

我想到的最简单的方法是列出除Name和Job之外的所有列,然后对它们进行迭代{<1}}:

pandas.to_numeric

编辑:

如果你绝对想要使用数字而不是列名,并且已经知道它们是哪个indice:

cols=[i for i in df.columns if i not in ["Name","Job"]]
for col in cols:
    df[col]=pd.to_numeric(df[col])

虽然这比必要的要复杂得多。

答案 1 :(得分:0)

假设你有DF:

df
Out[125]: 
  Name Height Weight Age Job
0    0      2      3   4   5

df.dtypes
Out[126]: 

Name      object
Height    object
Weight    object
Age       object
Job       object
dtype: object

如果必须使用pd.to_numeric转换这些列,可以这样做:

df2 = pd.concat([pd.DataFrame([pd.to_numeric(df[e],errors='coerce') \
                               for e in df.columns if e not in ['Name','Job']]).T,\
                 df[['Name','Job']]],axis=1)


df2
Out[138]: 
   Height  Weight  Age Name Job
0       2       3    4    0   5

df2.dtypes
Out[139]: 
Height     int64
Weight     int64
Age        int64
Name      object
Job       object
dtype: object