我有一个包含许多空记录的数据框:
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')
但它会删除数据框中的所有记录。我该怎么办?
答案 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_3
和float
列不可避免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++;
}