Вы хотите, чтобы первый >
, которому не предшествовал /
. Посмотрите здесь , чтобы узнать, как это сделать.
Однако наивная реализация этого приведет к сопоставлению
в этом примере документа
Можете ли вы предоставить немного больше информации о проблема, которую вы пытаетесь решить? Вы выполняете итерацию через теги программно?
Не drop
. Просто возьмите строки, где EPS
конечен:
df = df[np.isfinite(df['EPS'])]
Он может быть добавлен при этом '& amp;' может использоваться для добавления дополнительных условий, например
df = df[(df.EPS > 2.0) & (df.EPS <4.0)]
Обратите внимание, что при оценке утверждений панды нужны скобки.
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
. Вам нужно добавить круглые скобки - df = df[(df.EPS > 2.0) & (df.EPS <4.0)]
, но также это не ответ на этот вопрос.
– jezrael
16 March 2016 в 12:52
Вы можете использовать метод dataframe notnull или инвертировать isnull или numpy.isnan :
In [332]: df[df.EPS.notnull()]
Out[332]:
STK_ID RPT_Date STK_ID.1 EPS cash
2 600016 20111231 600016 4.3 NaN
4 601939 20111231 601939 2.5 NaN
In [334]: df[~df.EPS.isnull()]
Out[334]:
STK_ID RPT_Date STK_ID.1 EPS cash
2 600016 20111231 600016 4.3 NaN
4 601939 20111231 601939 2.5 NaN
In [347]: df[~np.isnan(df.EPS)]
Out[347]:
STK_ID RPT_Date STK_ID.1 EPS cash
2 600016 20111231 600016 4.3 NaN
4 601939 20111231 601939 2.5 NaN
Я знаю, что это уже было дан ответ, но только ради чисто пандского решения этого конкретного вопроса, в отличие от общего описания из Амана (что было замечательно), и в случае, если кто-то еще случится на этом:
import pandas as pd
df = df[pd.notnull(df['EPS'])]
df.dropna(subset=['EPS'])
(на основе общего описания Амана, конечно, это также работает)
– joris
23 April 2014 в 13:53
notnull
также является тем, что Wes (автор Pandas) предложил в своем комментарии к другому ответу.
– fantabolous
9 July 2014 в 04:24
еще одно решение, которое использует тот факт, что np.nan != np.nan
:
In [149]: df.query("EPS == EPS")
Out[149]:
STK_ID EPS cash
STK_ID RPT_Date
600016 20111231 600016 4.3 NaN
601939 20111231 601939 2.5 NaN
Вы можете использовать это:
df.dropna(subset=['EPS'], how='all', inplace = True)
how='all'
здесь избыточно, потому что вы подмножите данные только с одним полем, так что оба 'all'
и 'any'
будут иметь тот же эффект.
– Anton Protopopov
16 January 2018 в 13:41
По какой-то причине ни один из ранее представленных ответов не работал для меня. Это базовое решение:
df = df[df.EPS >= 0]
Хотя, конечно, это также приведет к потере строк с отрицательными номерами. Так что, если вы хотите, то это, вероятно, полезно добавить и после этого.
df = df[df.EPS <= 0]
Самый простой из всех решений:
filtered_df = df[df['EPS'].notnull()]
Вышеупомянутое решение лучше, чем использование np.isfinite ()
blockquote>
df.dropna(subset = ['column_name'])
. Надеюсь, что спасет хотя бы одного человека дополнительные 5 секунд «что я делаю неправильно». Отличный ответ, +1
– James Tobin
18 June 2014 в 15:07
pandas.notnull
вместоnp.isfinite
– Wes McKinney 21 November 2012 в 05:08EPS
в примере) содержит строки или другие типы, которые нельзя переваритьnp.isfinite()
. Я рекомендую использоватьpandas.notnull()
, который будет обрабатывать это более щедро. – normanius 5 April 2018 в 10:02