我正在处理一个数据集并遇到了一个问题。有一个列,其中有嵌套列出形式的值。例如,这是值
[Tomatillo-Red Chili Salsa (Hot), [Black Beans, Rice, Cheese, Sour Cream]]
之一。现在我想拆分此值,以便“番茄红辣椒莎莎(热)”进入一个新创建的列,而“黑豆、大米、奶酪、酸奶油”进入另一列。
我尝试过这个方法
choices = Dataset['choice_description'].str.extract(r'\[([^[\]]*)\]', expand=False)
Dataset[['choice1', 'choice2', 'choice3']] = choices.apply(lambda x: pd.Series(str(x).split(', ')))`.
'choice_description' 是具有嵌套列表类型值的列名称。 Choices1、choices2 和 Choices3 是新创建的列。
当我运行上面的代码时,我得到了意想不到的输出,其中“Tomatillo-Red Chili Salsa(Hot)”位于 choice1 列下,这是正确的,但在 choice2 列下我只得到了“Black beans”而不是整个“Black Beans” ,米饭,奶酪,酸奶油”和其余的“米饭,奶酪,酸奶油”位于 choice3 列下。为什么我得到这样的输出。我想要选择 1 列中的“番茄红辣椒莎莎(热)”和选择 2 列中的“黑豆、大米、奶酪、酸奶油”。
假设表示嵌套列表的字符串始终具有相同的结构,即“[some item,[list,of,additional,items]”,您可以使用
Dataset[['choice1', 'choice2']] = (
Dataset['choice_description']
.str.lstrip('[')
.str.rstrip(']')
.str.split(', [', expand=True, regex=False)
)
它很难看且不灵活,但它会让两个部分分开。