我有这个DataFrame,只想要EPS列不是NaN的记录:

>>> df
                 STK_ID  EPS  cash
STK_ID RPT_Date                   
601166 20111231  601166  NaN   NaN
600036 20111231  600036  NaN    12
600016 20111231  600016  4.3   NaN
601009 20111231  601009  NaN   NaN
601939 20111231  601939  2.5   NaN
000001 20111231  000001  NaN   NaN

……。像df.drop(....)这样的东西来获得这个结果的数据框架:

                  STK_ID  EPS  cash
STK_ID RPT_Date                   
600016 20111231  600016  4.3   NaN
601939 20111231  601939  2.5   NaN

我怎么做呢?


当前回答

你可以试试:

df['EPS'].dropna()

其他回答

在有大量列的数据集中,最好能看到有多少列包含空值,有多少列不包含空值。

print("No. of columns containing null values")
print(len(df.columns[df.isna().any()]))

print("No. of columns not containing null values")
print(len(df.columns[df.notna().all()]))

print("Total no. of columns in the dataframe")
print(len(df.columns))

例如,在我的数据框架中,它包含82列,其中19列包含至少一个空值。

此外,您还可以自动删除cols和行,这取决于哪个有更多的空值 下面是智能执行此操作的代码:

df = df.drop(df.columns[df.isna().sum()>len(df.columns)],axis = 1)
df = df.dropna(axis = 0).reset_index(drop=True)

注意:上面的代码删除了所有的空值。如果需要空值,请在此之前处理它们。

下面的方法对我很有效。如果以上方法都不起作用,那就有帮助了:

df[df['colum_name'].str.len() >= 1]

其基本思想是,只有当长度强度大于1时才拾取记录。这在处理字符串数据时尤其有用

最好!

它可以添加在'&'可以用来添加额外的条件。

df = df[(df.EPS > 2.0) & (df.EPS <4.0)]

注意,在对语句求值时,pandas需要括号。

另一个版本:

df[~df['EPS'].isna()]

我知道这个问题已经被回答了,但为了对这个具体问题的纯熊猫解决方案,而不是阿曼的一般描述(这很好),以防其他人碰巧遇到这个问题:

import pandas as pd
df = df[pd.notnull(df['EPS'])]