我有一个数据框,看起来像:
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']
最佳答案
尝试以下单行代码,不使用Pandas:
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)
从前面的结果可以看出,我的解决方案似乎比基于熊猫的解决方案有效得多。简单更好:-)
关于python - 我想在用逗号分隔值的列中用逗号分割,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57965133/