Python 以逗号和方括号分隔的数据透视列
Python pivot column with comma and bracket separated
我正在处理一个目前看起来像这样的大型数据框:
ID
Region
Noun
1
North America
[('Everything', 'NP'), ('the product','NP'), ('it','NP')]
2
North America
[('beautiful product','NP')]
第三列包含名词短语,每个短语都有标签(两个大写字母)。
这些都是引号,然后加上括号,再放在方括号里,让我很难分开和旋转。
我只想旋转最后一列 ,因此最终输出将如下所示:
ID
Region
Noun
Type
1
North America
everything
NP
1
North America
the product
NP
1
North America
it
NP
2
North America
beautiful product
NP
烦人的是有些行的括号比其他行多。
有什么方法可以在 Python 上实现吗?
我假设您在 Noun
列中有字符串。您可以对它们应用 ast.literal_eval
以将它们转换为 Python 列表:
from ast import literal_eval
# apply if Noun are strings, skip otherwise
df["Noun"] = df["Noun"].apply(literal_eval)
df = df.explode("Noun")
df[["Noun", "Type"]] = df["Noun"].apply(pd.Series)
print(df)
打印:
ID Region Noun Type
0 1 North America Everything NP
0 1 North America the product NP
0 1 North America it NP
1 2 North America beautiful product NP
这是另一种方式:
df2 = df.explode('Noun').reset_index(drop=True)
df2[['ID','Region']].join(pd.DataFrame(df2['Noun'].tolist(),columns = ['Noun','Type']))
输出:
ID Region Noun Type
0 1 North America Everything NP
1 1 North America the product NP
2 1 North America it NP
3 2 North America beautiful product NP
我正在处理一个目前看起来像这样的大型数据框:
ID | Region | Noun |
---|---|---|
1 | North America | [('Everything', 'NP'), ('the product','NP'), ('it','NP')] |
2 | North America | [('beautiful product','NP')] |
第三列包含名词短语,每个短语都有标签(两个大写字母)。 这些都是引号,然后加上括号,再放在方括号里,让我很难分开和旋转。
我只想旋转最后一列 ,因此最终输出将如下所示:
ID | Region | Noun | Type |
---|---|---|---|
1 | North America | everything | NP |
1 | North America | the product | NP |
1 | North America | it | NP |
2 | North America | beautiful product | NP |
烦人的是有些行的括号比其他行多。 有什么方法可以在 Python 上实现吗?
我假设您在 Noun
列中有字符串。您可以对它们应用 ast.literal_eval
以将它们转换为 Python 列表:
from ast import literal_eval
# apply if Noun are strings, skip otherwise
df["Noun"] = df["Noun"].apply(literal_eval)
df = df.explode("Noun")
df[["Noun", "Type"]] = df["Noun"].apply(pd.Series)
print(df)
打印:
ID Region Noun Type
0 1 North America Everything NP
0 1 North America the product NP
0 1 North America it NP
1 2 North America beautiful product NP
这是另一种方式:
df2 = df.explode('Noun').reset_index(drop=True)
df2[['ID','Region']].join(pd.DataFrame(df2['Noun'].tolist(),columns = ['Noun','Type']))
输出:
ID Region Noun Type
0 1 North America Everything NP
1 1 North America the product NP
2 1 North America it NP
3 2 North America beautiful product NP