Python 生成不带NaN值的新数据帧
我有以下数据帧:Python 生成不带NaN值的新数据帧,python,pandas,dataframe,Python,Pandas,Dataframe,我有以下数据帧: a b c d e 0 NaN 2.0 NaN 4.0 5.0 1 NaN 2.0 3.0 NaN 5.0 2 1.0 NaN 3.0 4.0 NaN 3 1.0 2.0 NaN 4.0 NaN 4 NaN 2.0 NaN 4.0 5.0 我试图生成一个没有NaN值的新数据帧。 一行中始终存在相同数量的NaN值 最终的数据帧应如下所示: x y z 0 2 4 5 1 2
a b c d e
0 NaN 2.0 NaN 4.0 5.0
1 NaN 2.0 3.0 NaN 5.0
2 1.0 NaN 3.0 4.0 NaN
3 1.0 2.0 NaN 4.0 NaN
4 NaN 2.0 NaN 4.0 5.0
我试图生成一个没有NaN值的新数据帧。
一行中始终存在相同数量的NaN值
最终的数据帧应如下所示:
x y z
0 2 4 5
1 2 3 5
2 1 3 4
3 1 2 4
4 2 4 5
有人知道一个简单的方法吗?
感谢您的帮助。使用函数并选择前3列:
df = pd.DataFrame(justify(df.values,invalid_val=np.nan)[:, :3].astype(int),
columns=list('xyz'),
index=df.index)
print (df)
x y z
0 2 4 5
1 2 3 5
2 1 3 4
3 1 2 4
4 2 4 5
使用数组索引:
pd.DataFrame(df.values[df.notnull().values].reshape(df.shape[0],3),
columns=list('xyz'),dtype=int)
x y z
0 2 4 5
1 2 3 5
2 1 3 4
3 1 2 4
4 2 4 5
如果
dataframe
跨行(如第1行有4个值)和第2行(如第2行有3个值)具有更多的不一致性值,则可以执行以下操作:
a b c d e g
0 NaN 2.0 NaN 4.0 5.0 6.0
1 NaN 2.0 3.0 NaN 5.0 NaN
2 1.0 NaN 3.0 4.0 NaN NaN
3 1.0 2.0 NaN 4.0 NaN NaN
4 NaN 2.0 NaN 4.0 5.0 NaN
pd.DataFrame(df.apply(lambda x: x.values[x.notnull()],axis=1).tolist())
0 1 2 3
0 2.0 4.0 5.0 6.0
1 2.0 3.0 5.0 NaN
2 1.0 3.0 4.0 NaN
3 1.0 2.0 4.0 NaN
4 2.0 4.0 5.0 NaN
在这里,我们无法删除最后一列中的
NaN
。如果像您的示例中那样,值跨列增加,您可以对轴=1进行排序:
res = pd.DataFrame(np.sort(df.values, 1)[:, :3],
columns=list('xyz'), dtype=int)
print(res)
x y z
0 2 4 5
1 2 3 5
2 1 3 4
3 1 2 4
4 2 4 5