我有一个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']
代码运行正常...
请帮助。
答案 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']