dropna()表示多列

时间:2017-02-19 20:03:05

标签: python pandas nan

以下是我的数据框示例:

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表。

我使用了pd.DataFrame.dropna,但它没有删除单元格的补丁。有没有办法在没有循环列的情况下这样做?

1 个答案:

答案 0 :(得分:1)

我认为您可以apply使用dropna

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

values创建的排序numpy solution的另一个numpy array,然后按dropna删除所有NaN的行:

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