Python 根据id匹配收集行和列

Python 根据id匹配收集行和列,python,pandas,dataframe,Python,Pandas,Dataframe,我使用python和pandas库。我想根据一个条件从数据框中收集行和列,仅从特定列“BikeID”中收集具有类似“BIKE-\d\d\d\d”模式的ID。我尝试了以下几种版本: d1=1.dataframe d2 = d1[d1["BikeID"] == re.compile(r' (BIKE-\d\d\d\d)')] 但是我得到的是一个空的数据帧。它在特定的情况下工作: d2 = d1[d1["BikeID"] == 'BIKE-0001'] ,但我想匹配前面有自行车的所有ID。如果你

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

d1=1.dataframe

d2 = d1[d1["BikeID"] == re.compile(r' (BIKE-\d\d\d\d)')] 
但是我得到的是一个空的数据帧。它在特定的情况下工作:

d2 = d1[d1["BikeID"] == 'BIKE-0001']
,但我想匹配前面有自行车的所有ID。如果你能告诉我做这项工作的方法,我将不胜感激

您可以使用正则表达式模式
'(^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

Mh,你的问题很难理解:(,请检查此页面并相应地格式化你的问题:请发布原始数据、代码,通过编辑你的问题来创建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')]
应该过滤DFI在您的示例中代码可以工作。当我使用您的代码(与我的数据框一起)时,我收到一个错误:“DataFrame”对象没有属性“str”。我不明白为什么。还有,为什么会出现以下情况:d2=d1[d1['BikeID']==re.compile(r'(^BIKE)]正在返回一个空数据帧(名为d2)?