dropna() 用于多列

dropna() for multiple columns

这是我的数据框示例:

benzene toluene styrene xylenes + ethylbenzene  1,3,5-trimethylbenzene  propylbenzene   chlorobenzene   4-ethyltoluene  isopropyl benzene   1,3-butadiene
0   1.1040  NaN NaN NaN NaN NaN NaN NaN NaN 0.1914
1   1.1312  NaN NaN NaN NaN NaN NaN NaN NaN 0.2353
2   1.6092  NaN NaN NaN NaN NaN NaN NaN NaN 0.7289
3   1.2578  NaN NaN NaN NaN NaN NaN NaN NaN 0.3269
4   1.8245  NaN NaN NaN NaN NaN NaN NaN NaN 0.2859
5   1.1438  NaN NaN NaN NaN NaN NaN NaN NaN 0.1229
6   1.1492  NaN NaN NaN NaN NaN NaN NaN NaN 0.4135
7   0.8638  NaN NaN NaN NaN NaN NaN NaN NaN 0.6211
8   1.3209  NaN NaN NaN NaN NaN NaN NaN NaN 0.6243
9   1.8316  NaN NaN NaN NaN NaN NaN NaN NaN 0.6711
10  1.0491  NaN NaN NaN NaN NaN NaN NaN NaN 0.3379
11  1.5014  NaN NaN NaN NaN NaN NaN NaN NaN 0.7981
12  0.8355  NaN NaN NaN NaN NaN NaN NaN NaN 0.2950
13  1.5157  NaN NaN NaN NaN NaN NaN NaN NaN 0.7630
14  NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
15  0.3561  NaN NaN NaN NaN NaN NaN NaN NaN 0.1983
16  16.9953 NaN NaN NaN NaN NaN NaN NaN NaN 11.6154
17  NaN 2.5533  1.7676  4.8479  2.1782  2.0693  NaN NaN NaN NaN
18  NaN 4.8740  4.5862  5.6155  5.3850  5.1158  NaN NaN NaN NaN
19  NaN 5.5761  7.1540  5.2305  7.0061  6.6558  NaN NaN NaN NaN
20  NaN 5.6369  8.0997  5.0377  7.4323  7.0607  NaN NaN NaN NaN
21  NaN 5.6762  8.5204  5.0503  7.9827  7.5835  NaN NaN NaN NaN
22  NaN 5.7317  8.9214  4.7230  8.4647  8.0415  NaN NaN NaN NaN
23  NaN 5.6349  8.3186  4.2832  8.4023  7.9822  NaN NaN NaN NaN
24  NaN 5.5504  9.1297  4.2451  8.2951  7.8803  NaN NaN NaN NaN
25  NaN 5.9629  9.0821  4.3384  9.0512  8.5986  NaN NaN NaN NaN
26  NaN 5.7665  10.1691 4.2266  8.9481  8.5007  NaN NaN NaN NaN
27  NaN 5.6709  9.1637  4.0334  9.0945  8.6397  NaN NaN NaN NaN
28  NaN 5.8178  8.8859  4.0104  9.0523  8.5997  NaN NaN NaN NaN
29  NaN 5.5470  9.0448  3.9718  8.8667  8.4233  NaN NaN NaN NaN
[...]

实际尺寸为 66x10

我对每列有大约 17 个非 NAN 值的序列。我想放弃 Nan 细胞以获得完整的 17x10 table。

我使用了 pd.DataFrame.dropna,但它不会删除细胞块。有没有一种方法可以在不循环列的情况下这样做?

我想你可以使用 applydropna:

df = df.apply(lambda x: pd.Series(x.dropna().values))
print (df)

另一个 numpy solution 排序 numpy arrayvalues and then remove rows with all NaN by dropna 创建:

df = pd.DataFrame(np.sort(df.values, axis=0), index=df.index, columns=df.columns)
       .dropna(how='all')
print (df)