如何在pandas中根据给定条件提取特定数字

问题描述 投票:0回答:1

我有一个这样的样本数据:

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])

但是结果是错误的。

python pandas data-analysis
1个回答
0
投票

我能够使用此代码做到这一点:

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)

© www.soinside.com 2019 - 2024. All rights reserved.