困惑为什么在应用pd.to_numeric

时间:2019-10-10 14:44:51

标签: python python-3.x pandas

我有一个数据框,其中第一列包含需要保留的字符串名称,其余列包含数字和字符串的混合。我只对数字感兴趣,因此我想将这些列转换为数字并将字符串值强制为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")

为什么这行得通,但不能应用在数据帧的一部分上呢?有更简单的方法吗?

2 个答案:

答案 0 :(得分:0)

我建议删除“样品名称”列以使用它:

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

也请查看熊猫文档here

答案 1 :(得分:0)

这样,您可以在列中将包含字符串的单元格设为NaN:

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