Удалить строки, где тип значения столбца-строка 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