Не понятно, почему столбцы не изменяются на числовой тип при применении pd.to_numeric - PullRequest
0 голосов
/ 10 октября 2019

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

, почему это работает, но с использованием применения к срезукадра данных нет? Есть ли более простой способ сделать это?

1 Ответ

0 голосов
/ 10 октября 2019

Я бы предложил удалить столбец «Имя образца», чтобы использовать это:

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

, проверьте также документацию Pandas здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...