【问题标题】:collect rows and columns based on id matching根据 id 匹配收集行和列
【发布时间】:2016-09-21 10:30:48
【问题描述】:

我使用 python 和 pandas 库。我想根据一个标准从数据框中收集行和列,仅从特定列“BikeID”中收集具有“BIKE-\d\d\d\d”之类的模式的那些 id。我尝试了以下几个版本:

d1 = pandas.dataframe

d2 = d1[d1["BikeID"] == re.compile(r' (BIKE-\d\d\d\d)')] 

但我得到的是一个空的数据框。它在特定时起作用:

d2 = d1[d1["BikeID"] == 'BIKE-0001']

,但我想匹配前面有 BIKE 的所有 id。如果你能告诉我一种完成这项任务的方法,我将不胜感激。

【问题讨论】:

标签: python pandas dataframe


【解决方案1】:

您可以使用str.extract 通过正则表达式模式'(^BIKE-[\d]{4})' 来实现此目的,这将查找以 BIKE- 开头的字符串,然后是 4 位数字:

In [167]:
s= pd.Series(['BIKE-0001', 'BIKE','BIKE-000','sdBIKE-0001'])
s

Out[167]:
0      BIKE-0001
1           BIKE
2       BIKE-000
3    sdBIKE-0001
dtype: object

In [168]:
s.str.extract(r'(^BIKE-[\d]{4})', expand=False)

Out[168]:
0    BIKE-0001
1          NaN
2          NaN
3          NaN
dtype: object

【讨论】:

  • 请通过编辑您的问题发布原始数据、代码以创建您的 df 和所需的输出
  • 感谢您的回答。正如我所说,以下内容:d2 = d1[d1["BikeID"] == 'BIKE-0001'] 将在 d2 数据框中存储 BikeID = BIKE-0001 的产品的行和所有列。 BikeID 的范围从 Bike-0001 到 Bike-0400。我想在数据框 (d2) 中收集其 BikeID 以 BIKE 开头的所有产品的行和所有列。我必须导入一些东西才能使用 str 吗?
  • 在这种情况下,s.str.extract(r'(^BIKE)', expand=False) 模式应该可以工作
  • 澄清d2 = d1[d1['BikeID'].str.contains(r'^BIKE')]应该过滤df
  • 在您的示例中,代码有效。当我使用您的代码(使用我的数据框)时,出现错误:“DataFrame”对象没有属性“str”。我不明白为什么。另外,为什么会出现以下情况: d2 = d1[d1["BikeID"] == re.compile(r' (^BIKE)')] 正在返回一个空数据框(名为 d2)?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-27
  • 1970-01-01
  • 1970-01-01
  • 2020-09-29
  • 2021-06-02
相关资源
最近更新 更多