我需要在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()]
仍然会产生空数据帧!
我做错了什么?
答案 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