python - 如何展平 Pandas 数据框列中的列表?

标签 python pandas list dataframe

我有一个 pandas 数据框,其中一列 RESULT 在列表中有列表。

  ID                     RESULT
0  A  [nan, ['PASS'], nan, nan]
1  B  [['FAIL'], nan, nan, nan]
2  C  [['PASS'], nan, nan, nan]
3  D       [nan, nan, nan, nan]
4  E  [nan, ['FAIL'], nan, nan]

我想让 RESULT 列成为一个平面列表。例如,第一种情况是 [nan, 'PASS', nan, nan]。最终答案应如下所示。

  ID                     RESULT
0  A  [nan, 'PASS', nan, nan]
1  B  ['FAIL', nan, nan, nan]
2  C  ['PASS', nan, nan, nan]
3  D  [nan, nan, nan, nan]
4  E  [nan, 'FAIL', nan, nan]

我试图创建一个函数,但它没有将列更新为平面列表。下面是我试过的代码。

def flatten_list(mylist):
    # print(mylist)
    for index, value in enumerate(mylist):
        if type(value) is list:
            mylist[index] = value[0]
        # print(mylist)
        return mylist

df_bin['RESULT'] = df_bin['RESULT'].apply(flatten_list)

但如果我尝试下面的一个简单示例,它就可以工作。我想知道有什么区别。我将不胜感激任何指导。也可以使用 lambda 函数来实现相同的结果。

mylist = [nan, ['PASS'], nan, nan]
for n, i in enumerate(mylist):
    if type(i) is list:
        mylist[n] = i[0]
print(mylist)

最佳答案

可以使用 pandas.core 中的内部 flatten 函数来执行此操作

import pandas as pd
from pandas.core.common import flatten

df = pd.DataFrame({'ID':['A','B'],
                   'Result':[['nan', ['PASS'], 'nan', 'nan'], [['FAIL'], 'nan', 'nan', 'nan']]
                  })
df['Result'] = df['Result'].apply(lambda x: list(flatten(x)))

输出:

    ID  Result
0   A   [nan, PASS, nan, nan]
1   B   [FAIL, nan, nan, nan]

根据您的示例,我想这应该可行。

关于python - 如何展平 Pandas 数据框列中的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64628230/

相关文章:

python - 编写创建并返回列表的函数

python - SQL Server DATE 作为字符串检索到 pandas

python - 计算数据框中的 NaN 值

python - 创建从第 x 天开始的自定义月份

python - 为列表中的重复元素添加空格

python - 法定年龄证明者/检查者/计算器

python - 找到最重复的! np.数组!在列表中

Python:如何找到两个字符串列表之间的差异?

python - 如何返回给定长度的所有列表元素?

python - Redis 命名空间