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