我有一个这样的样本数据:
0 46X ⌀ 376_ 000 THRU
1 SLOT ⌀250 X .750 LG ↧.03
2 -2X .250-20-UNC-2B ↧.75
3 ⌀ 755+.002
4 SLOT ⌀. 375 X 1.98 LG THRU
5 2X SLOT⌀ 256 _ 000
6 ↧ 1.00
7 50X ⌀ 265 THRU
8 SLOT ⌀250 X .750 LG ↧.03
9 SLOT ⌀ 505 +.002 WIDE X 3.86 LG THRU
10 42.±12
11 4X ⌀ 265 THRU
12 2X dĩa 06 THRU -
13 MARKED " A"
14 THRU
15 -. 000
16 +.004 X
17 * X.356 LG
18 CHAMFER .05 X 45°
19 MARKED "B"
20 5 -. 000 Y
21 40.512
22 NOTES: UNLESS OTHERWISE SPECIFIED:
23 4X R.378 THRU
24 2. FINISHED PART FREE OF MANUFACTURING RESIDUE...
25 3. CHEMICAL CLEAN PER SOLYNDRA CLEANING SPEC. ...
26 4\ DIE STAMP OR SCRIBE SOLYNDRA PART NUMBER, R...
27 5 BAG AND TAG WITH SOLYNDRA''S PART NUMBER AND...
28 2X FULL R.
29 THRU
30 (2.823)
31 100 SHT XXXXX-1200
32 755+.003
33 (.197)
34 1.175
35 6. PACKAGE FOR SHIPPING AND STORAGE USING PROT...
36 10X .375-16 UNC-2B THRU MARKED "C"
37 2.350
38 2.850
39 ACO
40 COD B
41 4.75 2.750
42 CO A
43 OC
44 OC B
45 300
46 10X .250-20 UNC-2B THRU
47 SIDE VIEW
48 10X 4.375
49 2X 4.250
50 8X 4.000
51 COADA
52 DACA
53 ACD
54 3X 2.823
55 23X 2.750
我在 pandas DataFrame 中有一个包含文本数据的列。我的任务是从这段文本中提取数字,但有两个特定条件:
1.忽略字母“X”之前的任何数字。
示例:在文本“46X ⌀ 376_ 000 THRU”中,忽略数字 46,因为它位于“X”之前。
2.忽略符号“+”或“-”后面的任何数字。
示例:在文本“⌀ 755+.002”中,只应提取数字 755,因为“+”后面的数字将被忽略。 同样,在文本“-2X .250-20-UNC-2B”中,忽略数字 20,因为它位于“-”之后。
我的目标是根据这些规则从每个文本条目中仅提取有效数字,并将结果存储在 DataFrame 中的新列中。
我尝试这样做:
df['integers'] = df['text'].str.findall(r'(?<!X)\b\d+\b(?![+-])')
df['integers'] = df['integers'].apply(lambda x: [int(i) for i in x])
但是结果是错误的。
我能够使用此代码做到这一点:
df['text'] = df['text'].apply(lambda 文本: re.sub(r'[^a-zA-Z0-9\s.+-]', '', text))
def lz(文本):
return re.sub(r'(?<!\d)(\.\d+)', r'0\1', text)
df['文本'] = df['文本'].apply(lz)
def ext(文本):
text = re.split(r'[+-]', text)[0]
if 'X' in text:
text = text.split('X')[-1]
numbers = re.findall(r'\d+\.\d+|\d+', text)
return numbers
df['提取的数字'] = df['text'].apply(ext)