Pandas:删除所有列

时间:2018-05-18 19:37:33

标签: python pandas dataframe nan

我有一个包含许多空记录的数据框:

Col_1    Col_2      Col_3
10         5          2
22         7          7
3         9          5       
4         NaN       NaN
5         NaN       NaN
6         4         NaN
7         6          7
8         10        NaN
12        NaN        1

我想删除所有列中的所有NaN值。如您所见,每列具有不同的行数。所以,我想得到这样的东西:

Col_1    Col_2      Col_3
10         5          2
22         7          7
3          9          5       
4          4          7
6          6          1
7         10          
8                 
12    

我试过

filtered_df = df.dropna(how='any')

但它会删除数据框中的所有记录。我该怎么办?

4 个答案:

答案 0 :(得分:2)

使用Divakar的justify功能 -

df[:] = justify(df.values, invalid_val=np.nan, axis=0, side='up')
df = df.fillna('')

print(df)

   Col_1 Col_2 Col_3
0   10.0     5     2
1   22.0     7     7
2    3.0     9     5
3    4.0     4     7
4    5.0     6     1
5    6.0    10      
6    7.0            
7    8.0            
8   12.0            

答案 1 :(得分:2)

  

如您所见,每列的行数不同。

DataFrame是一种表格数据结构:您可以查找索引和列,并查找该值。如果每列的行数不同,则索引无意义且具有误导性。 dict可能是更好的选择:

{c: df[c].dropna().values for c in df.columns}

{c: list(df[c]) for c in df.columns}

答案 2 :(得分:1)

您还可以在系列列表中使用pd.concat

请注意,如果您删除Col_2选项,则Col_3float列不可避免NaN

dtype=object

答案 3 :(得分:0)

你也可以试试这个

function newDiv(n) { var bodyObj = document.getElementsByTagName('body')[0]; var div = document.createElement('div'); div.innerHTML = n; bodyObj.appendChild(div); if(n===0) { var h1 = document.createElement('h1'); h1.innerHTML = 'Hallo World'; bodyObj.appendChild(h1); } } var i=0; while(i<10) { window.setTimeout(function() { newDiv(i--); // i-1 does not work, placing i-- before does not work either. }, i*1000); i++; }