Python正则表达式输出NaN

Python正则表达式输出NaN,python,regex,pandas,Python,Regex,Pandas,我有一个pandas dataframe列,其中包含如下字符(本应为字典,但在刮入CSV后变为字符串): 我试图提取“name”的值,因此在本例中,它将是“Drinks” 我现在拥有的代码(如下所示)一直为整个数据帧输出NaN df['extracted_category'] = df.category.str.extract('("name":*(?="slug"))') 我的正则表达式怎么了?谢谢 最好将其转换为您可以使用的数据帧,pd.Series

我有一个pandas dataframe列,其中包含如下字符(本应为字典,但在刮入CSV后变为字符串):

我试图提取“name”的值,因此在本例中,它将是“Drinks”

我现在拥有的代码(如下所示)一直为整个数据帧输出NaN

df['extracted_category'] = df.category.str.extract('("name":*(?="slug"))')

我的正则表达式怎么了?谢谢

最好将其转换为您可以使用的数据帧,
pd.Series
进行类似的转换

# sample dataframe
df
                                          category
0  {"id":307,"name":"Drinks","slug":"food/drinks"}

df.category.apply(lambda x : pd.Series(eval(x)))
    id    name         slug
0  307  Drinks  food/drinks
或者使用将字符串转换为字典


Hi@Ellie请检查此方法:

x = {"id":307,"name":"Drinks","slug":"food/drinks"}
result = [(key, value) for key, value in x.items() if key.startswith("name")]
print(result)
[('name', 'Drinks')]

因此,首先(“name”:*(?=“slug”))中最外层的括号需要去掉,因为它们代表第一组,提取的值将等于第一组,而第一组不是“name”值所在的位置

一个更简单的正则表达式是“name”:“(\w*)”(注意:确保将要提取的正则表达式部分保留在括号内)。此正则表达式查找以下字符串:

    "name":"
并提取它后面(\w*)的所有字母,然后在另一个双引号处停止


您可以在以下位置测试您的正则表达式:

这将获得组1
“name”:“([^”]+)”
,但是您可以将其解析为json并获得key name的值吗?您好,我想您不需要作为
?=
的前瞻子句。相反,您可以更新您的正则表达式并尝试使用此值:
(“name”):*(“\w*”)
。在上进行测试
x = {"id":307,"name":"Drinks","slug":"food/drinks"}
result = [(key, value) for key, value in x.items() if key.startswith("name")]
print(result)
[('name', 'Drinks')]
    "name":"