我想在用逗号分隔值的列中用逗号分割

时间:2019-09-16 22:29:06

标签: python pandas

我有一个看起来像这样的数据框:

data = {'X':['A, B, C'], 'Y':[['apple, pear, berries'], ['milk, butter, eggs'], ['apple, milk, bread']]}

data = pd.DataFrame(data)

我正在尝试遍历“ Y”列以拆分“,”,并保存到仅存储唯一值的空列表中。

我尝试过:

list = data['Y'].tolist()
new_list = set(list)

但是它不返回我想要的。

任何帮助将不胜感激。

预期的输出将类似于显示的列表:

['apple', 'pear', 'berries', 'milk', 'butter', 'eggs', 'bread'] 

2 个答案:

答案 0 :(得分:3)

尝试此单行代码,不使用熊猫:

data = {'X':['A', 'B', 'C'], 'Y':[['apple', 'pear', 'berries'], ['milk', 'butter', 'eggs'], ['apple', 'milk', 'bread']]}

list(set(sum(data['Y'], [])))
# output: ['apple', 'milk', 'bread', 'pear', 'eggs', 'butter', 'berries']

您可以将我的解决方案与基于熊猫的解决方案进行比较:

我的解决方案:

%%timeit
list(set(sum(data['Y'], [])))
# 805 ns ± 4.84 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

@lmiguelvargasf的熊猫解决方案:

# Without df creation
%%timeit
#df = pd.DataFrame(data)
l = df['Y'].values.tolist() # this will have the same as data['Y']
new_list = list(set(reduce(lambda x,y: x+y,l)))
# 5.75 µs ± 220 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

# With df creation
%%timeit
df = pd.DataFrame(data)
l = df['Y'].values.tolist() # this will have the same as data['Y']
new_list = list(set(reduce(lambda x,y: x+y,l)))
# 658 µs ± 23.3 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

从以前的结果中可以看到,我的解决方案似乎比基于熊猫的解决方案有效得多。 简单更好:-)

答案 1 :(得分:1)

您的逻辑可能存在缺陷。首先,不要使用list作为变量名,因为这是Python的内置函数。

第二,我想您还不清楚data是一个词典,因此data['Y']会给您一个列表清单。因此,您将无法应用与数据框一起使用的方法。

第三,您可以使用reduce函数获得预期的输出

我相信您想将data转换为数据框,因此请使用以下内容:

import pandas as pd
from functools import reduce

data = {'X':['A', 'B', 'C'], 'Y':[['apple', 'pear', 'berries'], ['milk', 'butter', 'eggs'], ['apple', 'milk', 'bread']]}
df = pd.DataFrame(data)
l = df['Y'].values.tolist() # this will have the same as data['Y']
new_list = list(set(reduce(lambda x,y: x+y,l)))

您可以节省一些时间,方法是不转换为数据帧,而将reduce函数直接应用于data['Y']

new_list = list(set(reduce(lambda x,y: x+y, data['Y'])))

输出

['apple', 'berries', 'bread', 'butter', 'eggs', 'milk', 'pear']
相关问题