2016-09-21 75 views
-1

我使用python和熊猫库。我想根据一个标准从数据框中收集行和列,仅收集具有来自特定列“BikeID”的“BIKE- \ d \ d \ d \ d”模式的ID。我试过以下几个版本:根据id匹配收集行和列

D1 = pandas.dataframe

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

,但我得到一个空的数据帧来代替。它适用于具体情况:

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

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

+2

MH,你的问题是非常难以阅读:(请检查此页面并相应地设置您的问题格式:http://stackoverflow.com/help/how-to-ask –

回答

0

您可以使用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 
+0

请发布原始数据,通过编辑您的问题来创建您的df和所需输出的代码 – EdChum

+0

谢谢您的回答。正如我所说,以下内容:d2 = d1 [d1 [“BikeID”] =='BIKE-0001']将在d2数据帧中存储BikeID = BIKE-0001的行和所有列。 Bike-0001自行车-0400。我想收集数据rame(d2)BikeID以BIKE开头的所有产品的行和所有列。我需要导入一些东西来使用str吗? – sebastian44

+0

在这种情况下,模式's.str.extract(r'(^ BIKE)'expand = False)'应该可以工作 – EdChum