【问题标题】:Exclude Rows in Dataframe Based on Pattern (Regex?)根据模式排除数据框中的行(正则表达式?)
【发布时间】:2021-09-20 02:44:54
【问题描述】:

我在具有 GPS 纬度坐标的数据框中有一列。我想排除坐标以某种方式格式化的行。

正确:

[39, 16, 1031971/156250]

我想排除格式如下的那些(行):

[39, 8050139/500000, 0]

我使用正则表达式尝试了几件事,但没有成功。有任何想法吗?有时,斜线前后的位数会相差 1 或 2。例如,某些行中的 8050139/5000008050156/4000

该列的标题为GPS GPSLatitude

【问题讨论】:

  • 您的数据在列表中吗?还是以这种格式的字符串?
  • 它是一个具有该格式的字符串,位于数据框的列中。

标签: python regex pandas dataframe


【解决方案1】:

使用这个regex - ,.+\/.+, - 只需排除任何匹配的内容。正则表达式查找两个逗号之间的任何内容,其中包含/。第一个值没有两个逗号包围包含/ 的字符。

[39, 16, 1031971/156250]  
# no match

对于您的第二个值,它会:

[39, 8050139/500000, 0]
#  ^^^^^^^^^^^^^^^^^  match

在实际应用中,使用pd.Series.str.contains 并传递na=False 作为您的参数之一。我会像这样子集:

df[~df['gps'].str.contains(r',.+\/.+,', regex=True, na=False)]

【讨论】:

  • 我试过这个:patternDel = ",.+\/.+," 然后filter = df['GPS GPSLatitude'].str.contains(patternDel) 并没有返回。
  • filter 包含一系列布尔值和 np.nan 值,实际上没有。你到底在做什么?
  • 我在我的数据框上运行了这个:df[df['GPS GPSLatitude'].str.contains(r',.+\/.+,', regex=True, na=False)],它没有返回任何记录。我在想regex 不工作。但是您的逻辑非常有道理....
  • 哦,抱歉,您想反转系列~,以便它只选择匹配的元素。您运行的内容表明没有错误匹配的值。
  • 明白了。我运行了它,它返回了所有记录,并没有删除我们不想要的记录。
猜你喜欢
  • 2018-04-13
  • 1970-01-01
  • 2020-08-18
  • 1970-01-01
  • 2019-11-10
  • 2019-09-21
  • 2017-08-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多