我有一个数据框,其中第一列包含需要保留的字符串名称,其余列包含数字和字符串的混合。我只对数字感兴趣,因此我想将这些列转换为数字并将字符串值强制为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")
为什么这行得通,但不能应用在数据帧的一部分上呢?有更简单的方法吗?
答案 0 :(得分:0)
答案 1 :(得分:0)
这样,您可以在列中将包含字符串的单元格设为NaN:
df.loc[df['column'].str.contains('')==True, 'column'] = np.nan