У меня есть фрейм данных, где первый столбец содержит имена в виде строк, которые мне нужно сохранить, а остальные столбцы содержат смесь чисел и строк. Меня интересуют только цифры, поэтому я хочу преобразовать эти столбцы в числовые и принудительно установить значения строк в 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")
, почему это работает, но с использованием применения к срезукадра данных нет? Есть ли более простой способ сделать это?