首页 > 解决方案 > 从没有 NaN 值的多列中的值创建数组

问题描述

我目前有一个如下所示的数据框:

         col1              col2            col3
0  (10.213,-20.23)   (120.1,-300.23)   (111.0, -231.1)
1  (11.22,-22.33)    (123.1,-302.23)   (nan, nan)
2  (122.22,-22.44)   (nan,nan)         (nan, nan)

我正在尝试将所有集合添加到不同的列中,但不是 nan 集合。所以输出会是这样的:

                          col1              
0  ((10.213,-20.23),(120.1,-300.23),(111.0, -231.1))
1  ((11.22,-22.33),(123.1,-302.23)) 
2  (122.22,-22.44) 

请问有什么想法吗?

谢谢

标签: pythondataframe

解决方案


这是使用数据框的numpy数组表示然后将列表列表分配给单个系列的一种方法。

棘手的部分是过滤掉NaN元组;为此,我们可以使用filter

df = pd.DataFrame([[(10.213, -20.23), (120.1, -300.23), (111.0, -231.1)],
                   [(11.22, -22.33), (123.1, -302.23), (np.nan, np.nan)],
                   [(122.22, -22.44), (np.nan, np.nan), (np.nan, np.nan)]],
                  columns=['col1', 'col2', 'col3'])

res = pd.DataFrame({'col1': [list(filter(lambda x: any(pd.notnull(j) for j in x), i))
                             for i in df.values.tolist()]})

print(res)

                                                col1
0  [(10.213, -20.23), (120.1, -300.23), (111.0, -...
1                [(11.22, -22.33), (123.1, -302.23)]
2                                 [(122.22, -22.44)]

推荐阅读