在模式中使用JSON列

2024-05-16 19:21:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个JSON文件数据。下面是一个例子

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

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

我必须阅读名称,并将名称中的每一项与另一个df中的一列进行匹配。 我一直在把Names键的值转换成一个可以在模式中使用的列表。我试过的密码是

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(', ')

问题出在普里帕特身上。它的内容是

\bApple, Orange\b

如果我把名字列在下面

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

代码运行良好

请帮忙


Tags: 文件数据名称jsonappledfnamestype
2条回答

您需要调用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']
df2 = df1.loc[df1.Type.eq('Fruit')]
out_list=';'.join(df2['Names'].values).split(';')
#print(out_list)
['Apple', 'Orange', 'Papaya']

相关问题 更多 >