我有一个 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/