根据列值删除数据框中的行

时间:2016-04-25 19:00:09

标签: python pandas dataframe

我需要在C列中摆脱所有具有空值的行。以下是代码:

infile="C:\****"

df=pd.read_csv(infile)    

A   B   C   D
1   1   NaN 3
2   3   7   NaN
4   5   NaN 8
5   NaN 4   9
NaN 1   2   NaN

我尝试过两种基本方法。

方法1: 来源:How to drop rows of Pandas DataFrame whose value in certain columns is NaN

df.dropna()

结果是一个空的数据帧,这是有道理的,因为每一行都有一个NaN值。

df.dropna(subset=[3])

对于这种方法,我尝试使用列索引号和列名来使用子集值。数据框仍然是空的。

方法2: 来源:Deleting DataFrame row in Pandas based on column value

df = df[df.C.notnull()]

仍然会产生空数据帧!

我做错了什么?

2 个答案:

答案 0 :(得分:1)

df = pd.DataFrame([[1,1,np.nan,3],[2,3,7,np.nan],[4,5,np.nan,8],[5,np.nan,4,9],[np.nan,1,2,np.nan]], columns = ['A','B','C','D'])
df = df[df['C'].notnull()]
df

答案 1 :(得分:0)

这只是证明你的method 2正常工作(至少在熊猫0.18.0上):

In [100]: df
Out[100]:
     A    B    C    D
0  1.0  1.0  NaN  3.0
1  2.0  3.0  7.0  NaN
2  4.0  5.0  NaN  8.0
3  5.0  NaN  4.0  9.0
4  NaN  1.0  2.0  NaN

In [101]: df.dropna(subset=['C'])
Out[101]:
     A    B    C    D
1  2.0  3.0  7.0  NaN
3  5.0  NaN  4.0  9.0
4  NaN  1.0  2.0  NaN

In [102]: df[df.C.notnull()]
Out[102]:
     A    B    C    D
1  2.0  3.0  7.0  NaN
3  5.0  NaN  4.0  9.0
4  NaN  1.0  2.0  NaN

In [103]: df = df[df.C.notnull()]

In [104]: df
Out[104]:
     A    B    C    D
1  2.0  3.0  7.0  NaN
3  5.0  NaN  4.0  9.0
4  NaN  1.0  2.0  NaN