Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 生成不带NaN值的新数据帧_Python_Pandas_Dataframe - Fatal编程技术网

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