【问题标题】:Confused why columns won't change to type numeric when applying pd.to_numeric困惑为什么在应用 pd.to_numeric 时列不会更改为数字类型
【发布时间】:2020-01-25 20:44:25
【问题描述】:

我有一个数据框,其中第一列包含名称作为我需要保留的字符串,其余列包含数字和字符串的混合。我只对数字感兴趣,所以我想将这些列转换为数字并将字符串值强制为 NaN,我可以使用 errors="coerce"

但由于某种原因,当我在这些列上使用 pd.to_numeric 并强制错误时,它们仍然作为类型对象返回

print(df.info())
df.iloc[:,1:]=df.iloc[:,1:].apply(lambda x: pd.to_numeric(x,errors='coerce')) 
print(df.info())
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 867 entries, 0 to 866
Data columns (total 15 columns):
Sample Name    867 non-null object
PFBS           196 non-null object
PFHxS          829 non-null object
PFOS           827 non-null object
PFHpA          301 non-null object
PFOA           711 non-null object
PFNA           744 non-null object
PFDA           625 non-null object
PFUnDA         378 non-null object
PFDoDA         236 non-null object
PFOSA          118 non-null object
N-EtFOSAA      638 non-null object
N-MeFOSAA      541 non-null object
PFPeA          437 non-null object
PFHxA          217 non-null object
dtypes: object(15)
memory usage: 101.7+ KB
None
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 867 entries, 0 to 866
Data columns (total 15 columns):
Sample Name    867 non-null object
PFBS           196 non-null object
PFHxS          829 non-null object
PFOS           827 non-null object
PFHpA          301 non-null object
PFOA           711 non-null object
PFNA           744 non-null object
PFDA           625 non-null object
PFUnDA         378 non-null object
PFDoDA         236 non-null object
PFOSA          118 non-null object
N-EtFOSAA      638 non-null object
N-MeFOSAA      541 non-null object
PFPeA          437 non-null object
PFHxA          217 non-null object
dtypes: object(15)
memory usage: 101.7+ KB
None

为了让它发挥作用,我必须这样做

cols=df.columns.drop("Sample Name")
df[cols]=df[cols].apply(pd.to_numeric, errors="coerce")

为什么这行得通,但在数据帧的切片上使用 apply 却行不通?有没有更直接的方法?

【问题讨论】:

    标签: python python-3.x pandas


    【解决方案1】:

    我建议删除“示例名称”列以使用此:

    df.drop("Sample Name", axis = 1)
    

    查看 Pandas 文档here

    【讨论】:

      【解决方案2】:

      通过这种方式,您可以在一列中获取带有字符串的单元格为 NaN:

      df.loc[df['column'].str.contains('')==True, 'column'] = np.nan
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多