Удалить строки, где тип значения столбца-строка Pandas
У меня есть фрейм данных pandas. Одна из моих колонн должна быть только поплавками. Когда я пытаюсь преобразовать этот столбец в поплавки, меня предупреждают, что там есть строки. Я хотел бы удалить все строки, где значения в этом столбце являются строками...
4 ответов
использовать convert_objects
С param convert_numeric=True
это принудит любые не числовые значения к NaN
:
In [24]:
df = pd.DataFrame({'a': [0.1,0.5,'jasdh', 9.0]})
df
Out[24]:
a
0 0.1
1 0.5
2 jasdh
3 9
In [27]:
df.convert_objects(convert_numeric=True)
Out[27]:
a
0 0.1
1 0.5
2 NaN
3 9.0
In [29]:
вы можете затем бросить их:
df.convert_objects(convert_numeric=True).dropna()
Out[29]:
a
0 0.1
1 0.5
3 9.0
обновление
начиная с версии 0.17.0
этот метод в настоящее время устаревший и нужно использовать to_numeric
к сожалению, это работает на Series
вместо целого df, поэтому эквивалентный код теперь:
df.apply(lambda x: pd.to_numeric(x, errors='coerce')).dropna()
Вы можете найти тип данных столбца с . Что-то вроде df[col].dtype.kind
. См.документы numpy для получения более подробной информации. Транспонирование таблицы данных, чтобы перейти от индексов к колоннам.
предположим, что ваш фрейм данных df
и вы хотели убедиться, что все данные в одном из столбцов вашего фрейма данных являются числовыми в определенном pandas dtype
, электронной.г float
:
df[df.columns[n]] = df[df.columns[n]].apply(pd.to_numeric, errors='coerce').fillna(0).astype(float).dropna()
одна из моих колонок должна быть только поплавками. Я хотел бы удалить все строки где значения в этом столбце являются строками
вы можете преобразовать ваш ряд в числовой через pd.to_numeric
и затем использовать pd.Series.notnull
. Преобразование в float
требуется в качестве отдельного шага, чтобы избежать возврата вашей серии к object
dtype.
# Data from @EdChum
df = pd.DataFrame({'a': [0.1, 0.5, 'jasdh', 9.0]})
res = df[pd.to_numeric(df['a'], errors='coerce').notnull()]
res['a'] = res['a'].astype(float)
print(res)
a
0 0.1
1 0.5
3 9.0