使用熊猫将JSON列转换为模式

时间:2018-11-12 10:17:20

标签: python pandas dataframe

我有一个JSON文件数据。下面给出了一个示例。

[{
"Type": "Fruit",
"Names": "Apple;Orange;Papaya"

}, {
"Type": "Veggie",
"Names": "Cucumber;Spinach;Tomato"
}]

我必须阅读名称,并将名称的每个项目与另一个df中的一列进行匹配。 我一直坚持将Names键的值转换为可以在Pattern中使用的列表。我尝试的代码是

df1 = pd.DataFrame(data)


PriList=df1['Names'].str.split(";", n = 1, expand = True)

Pripat = '|'.join(r"\b{}\b".format(x) for x in PriList)

df['Match'] = df['MasterList'].str.findall('('+ Pripat + ')').str.join(', ')

问题在于Pripat。它的内容是

\bApple, Orange\b

如果我在下面的列表中提供姓名

Prilist=['Apple','Orange','Papaya']

代码运行正常...

请帮助。

2 个答案:

答案 0 :(得分:1)

您需要调用str.split,然后使用itertools.chain展平结果。

首先,做

df2 = df1.loc[df1.Type.eq('Fruit')]

现在,

from itertools import chain
prilist = list(chain.from_iterable(df2.Names.str.split(';').values))

还有stack(速度较慢):

prilist = df2.Names.str.split(';', expand=True).stack().tolist()

print(prilist)
['Apple', 'Orange', 'Papaya']

答案 1 :(得分:0)

df2 = df1.loc[df1.Type.eq('Fruit')]
out_list=';'.join(df2['Names'].values).split(';')
#print(out_list)
['Apple', 'Orange', 'Papaya']