Python 如何在重新搜索失败的数据框中查找行

Python 如何在重新搜索失败的数据框中查找行,python,regex,pandas,Python,Regex,Pandas,我试图用以下格式从Metar字符串中提取风向: EGAA 010020Z 33004KT 300V010 9999 FEW029 04/04 Q1019 我用它来提取风向,它适用于我的大部分数据,但在某些字符串上失败: df["Wind_Dir"] = df.metar.apply(lambda x: int(re.search(r"\s\d*KT\s", metar_data.metar[0]).group().strip()[:3])) 我想检查它出现故障的Metar字符串,而不是将gr

我试图用以下格式从Metar字符串中提取风向:

EGAA 010020Z 33004KT 300V010 9999 FEW029 04/04 Q1019
我用它来提取风向,它适用于我的大部分数据,但在某些字符串上失败:

df["Wind_Dir"] = df.metar.apply(lambda x: int(re.search(r"\s\d*KT\s", metar_data.metar[0]).group().strip()[:3]))
我想检查它出现故障的Metar字符串,而不是将
group()
re.search
中拉出,我只是按如下方式应用搜索以获得
re.Match
对象:

df["Wind_Dir"] = df.metar.apply(lambda x: re.search(r"\s\d*KT\s", x))
我尝试过按类型和Null进行过滤,但这两种方法都不起作用

任何帮助都将不胜感激


谢谢你的回答。不幸的是,我不能把它们都标记为解决方案,尽管我用它们来解决我的问题

最后,我将我的正则表达式更改为:

df[“Wind_Dir”]=df.metar.str.findall(r“Z\s\d\d\d|Z\sVRB”)


要匹配变量方向,但如果没有
df.metar.str.contains()

则无法找到该方向,您正在搜索: 对于基于
re.search
匹配模式的索引,返回一个带True的掩码

正如Pandas文档所述,如果您想要基于
re.match
的掩码,您应该使用:

您还可以使用以下选项:
它在执行分析的序列的每行上提取模式的第一个匹配项
NaN
将填充不包含模式的行,因此您可以获取
NaN
值来检索这些行。

您需要代码返回匹配的字符串,而不是re对象

当没有匹配项时,这也不起作用,因为re.search不会返回任何内容

试一试

在你的情况下,试试这个

df['Wind_Dir'] = df.metar.str.findall(r"\s\d*KT\s")
df["Wind_Dir"] = df['Wind_Dir'].apply(lambda x: x[0].strip()[:3])
在执行第二条语句之前,您可能还需要检查是否存在匹配项