如何从类型为string的嵌套列表中提取唯一值?

时间:2017-10-02 08:39:29

标签: python pandas series

我在下面列出了嵌套列表作为字符串:

L1 = ["['32', '54', '139', '195', 'NR6', 'NR7']", "['32', '54', '139', '195', 'NR6', 'NR7']", "['32', '54', '139', '195', 'NR1', 'NR2', 'NR3', 'NR5', 'N
    R6', 'NR7', 'NR8']", "['32', '54', '139', '195', 'NR1', 'NR2', 'NR5', 'NR6', 'NR7', 'NR8']"]

这里L1是:

L1 = df['column_name'].tolist()

此处的每个嵌套列表都是使用tolist()函数从pandas数据帧df中提取的,因此原始数据框的数据为:

column_Name
['32', '54', '139', '195', 'NR6', 'NR7']
['32', '54', '139', '195', 'NR6', 'NR7']
['32', '54', '139', '195', 'NR1', 'NR2', 'NR3', 'NR5', 'NR6', 'NR7', 'NR8']
...
...

我希望在删除任何重复项后加入L1的所有嵌套列表中的所有数据点。我尝试使用sum(L1,[]),但它并不起作用,因为所有嵌套列表都是字符串。为什么tolist函数在这里返回字符串列表&没有列表清单?有没有更好的方法从dataframe列直接从选定的行中获取唯一数据?

1 个答案:

答案 0 :(得分:0)

我认为你可以使用:

L = df['Column_Name'].apply(ast.literal_eval).tolist()
L = df['Column_Name'].str.strip("[']").str.split("', '").tolist()
print (L)
[['32', '54', '139', '195', 'NR6', 'NR7'], 
 ['32', '54', '139', '195', 'NR6', 'NR7'], 
 ['32', '54', '139', '195', 'NR1', 'NR2', 'NR3', 'NR5', 'NR6', 'NR7', 'NR8']]

然后制作https://github.com/firebase/quickstart-android/issues/83

a = [item for sublist in L for item in sublist])

最后一次转换为set以获取唯一列表:

b = list(set(a))
print (b)
['NR7', '32', '195', '139', '54', 'NR1', 'NR2', 'NR3', 'NR6', 'NR5', 'NR8']

另一个唯一的熊猫解决方案:

b = df['Column_Name'].str.split(", ", expand=True).stack().str.strip("[]'").unique().tolist()
print (b)
['32', '54', '139', '195', 'NR6', 'NR7', 'NR1', 'NR2', 'NR3', 'NR5', 'NR8']