小编Dat*_*e99的帖子

忽略大小写删除重复记录

我有一个包含多列的数据框,其中之一是 company_name。我正在尝试根据它们具有相同的 company_name 来删除重复的记录,但是我不知道如何在保持 company_name 的原始大小写的同时执行此操作。

我尝试将所有名称转换为小写,然后删除重复项,但如前所述,我想保留原始大小写。

df = pd.DataFrame({'company_name': ['Apple', 'apple', 'BlackBerry', 'blackberry','Blackberry'])
df['company_name'] = df['company_name'].str.strip()
df['company_name'] = df['company_name'].str.lower()
input_records.drop_duplicates(subset=['company_id'], inplace=True, 
   keep="first")
Run Code Online (Sandbox Code Playgroud)

此代码消除了重复项,但以全部小写形式存储公司名称。

想要的结果

company_name
Apple
BlackBerry
Run Code Online (Sandbox Code Playgroud)

实际结果

company_name
apple
blackberry
Run Code Online (Sandbox Code Playgroud)

python pandas

5
推荐指数
1
解决办法
1116
查看次数

在某些条件下从字符串中提取数字

我有一些使用大熊猫存储在数据框中的字符串,如果存在,我想从中提取所有数字。这些数字必须满足的条件是非常具体的,我不确定是否可以使用正则表达式来解决问题。条件是:

  • 数字不能在字符串的开头
  • 它不能出现在单词“ No.”之后或单词“ Question”之后

另外,如果可能的话,如果数字后面紧跟着e,我也想保留它。但是,这并不重要。

到目前为止,这是我能找到的所有数字,但是我不知道如何编写上面提到的条件。

testNumbers = re.findall(r'\d+', row['Name'])
Run Code Online (Sandbox Code Playgroud)

对于给定的字符串:“ Test T860商品编号9712250 787”

我希望正则表达式返回

[860, 787]
Run Code Online (Sandbox Code Playgroud)

python regex pandas

4
推荐指数
1
解决办法
72
查看次数

在字符串中搜索符合特定条件的子字符串

这是我其他文章的延续:在特定条件下从字符串中提取数字

总而言之,我有一些字符串存储在数据框中,我想提取与所有条件匹配的第一个数字(如果存在)。条件如下:

  • 数字不能在字符串的开头

  • 它不能出现在单词“ No.”之后或单词“ Question”之后

  • 该数字不能介于1960-2020之间

  • 如果数字后面紧跟字母e,我想用它提取e

到目前为止,这是我找到的数字,它照顾了前两个条件:

for index, row in df.iterrows():
    test = re.search(r'(?!^)(?<!\bNo\.\s)(?<!\bQuestion\s)(\d+)(?!\d)',
                     row['name'])
    if test:
        df.loc[
            df['name'] == row['name'], ['id']] = test.group()
Run Code Online (Sandbox Code Playgroud)

我也尝试过使用:

\b(?!196[0-9]\d|20[012][0])\d+\b
Run Code Online (Sandbox Code Playgroud)

来计算不在1960年和2020年之间的数字,但这似乎行不通。我也不明白如何抓住e(如果存在)。

范例1:

"Trial No. 32819 Question 485 Article 787e"
Run Code Online (Sandbox Code Playgroud)

我希望正则表达式返回

[787e]
Run Code Online (Sandbox Code Playgroud)

范例2:

"2981 XYZ Legislature"
Run Code Online (Sandbox Code Playgroud)

我希望正则表达式返回

None
Run Code Online (Sandbox Code Playgroud)

示例3”

"Addendum217Null"
Run Code Online (Sandbox Code Playgroud)

我希望正则表达式返回

[217]
Run Code Online (Sandbox Code Playgroud)

在此先感谢您的帮助!

python regex pandas

1
推荐指数
1
解决办法
42
查看次数

标签 统计

pandas ×3

python ×3

regex ×2