【发布时间】: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