我有一个包含多列的数据框,其中之一是 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) 我有一些使用大熊猫存储在数据框中的字符串,如果存在,我想从中提取所有数字。这些数字必须满足的条件是非常具体的,我不确定是否可以使用正则表达式来解决问题。条件是:
另外,如果可能的话,如果数字后面紧跟着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) 这是我其他文章的延续:在特定条件下从字符串中提取数字
总而言之,我有一些字符串存储在数据框中,我想提取与所有条件匹配的第一个数字(如果存在)。条件如下:
数字不能在字符串的开头
它不能出现在单词“ 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)
在此先感谢您的帮助!