遍历一列以查找每个位置第一次出现的特殊字符

Posted

技术标签:

【中文标题】遍历一列以查找每个位置第一次出现的特殊字符【英文标题】:Loop through a column to find first occurrence of special character for each location 【发布时间】:2021-10-10 02:49:16 【问题描述】:

数据框中有两列

location experience
a1       tech
a2       loyalty
a2       ‡€asd
a5       Ù…Ù
a5       completed
a6       
a7       --
a8       happy
a8       best
a9       for sure
a9       notgood
b1       amazing:
b1       /§!vision
b5       referral
    如何遍历位置,如果在第一行经验中识别出特殊字符,则删除所有位置。如果 Experience 中的第二行或其他行以特殊字符开头,我不必删除它。

示例 1: b1 太棒了:

b1 /§!视觉

这里第一行,经验值以字母开头,所以我不必删除任何位置值为b1的行

示例 2: a5 Ù…Ù

a5 完成

这里的第一个经验值以特殊字符开头,所以我必须删除所有位置值为 a5 的行

输出为

location experience
a1       tech
a2       loyalty
a2       ‡€asd
a6 
a8       happy
a8       best
a9       for sure
a9       notgood
b1       amazing:
b1       /§!vision
b5       referral

【问题讨论】:

【参考方案1】:

您可以使用 Pandas groupby 后跟 first 来获取第一行 experience。然后,使用str.match 检查experience 第一行值是否以字母开头。

import pandas as pd

df = pd.read_csv('sample.csv')
print(df)

location = df.groupby('location')

# get the first row of each group
loc_first = location.first()

# check if experience first row value starts with letter (or space?, 'a6' location)
exp_match = loc_first[~loc_first.experience.str.match(r'^[a-zA-Z\s]')]

# remove all rows with location
df = df[~df.location.isin(exp_match.index)]
print(df)

df 输出

   location experience
0        a1       tech
1        a2    loyalty
2        a2      ‡€asd
5        a6
7        a8      happy
8        a8       best
9        a9   for sure
10       a9    notgood
11       b1   amazing:
12       b1  /§!vision
13       b5   referral

【讨论】:

【参考方案2】:

试试这样:

import pandas as pd

df = pd.read_csv('test.csv', engine='python')
df.fillna(value='', inplace=True)
df[df.experience.str.isalnum()]

【讨论】:

以上是关于遍历一列以查找每个位置第一次出现的特殊字符的主要内容,如果未能解决你的问题,请参考以下文章

indexof是啥意思 indexof的特殊含义

js怎样获取某个特殊字符最后出现的位置

面试题之在字符串中查找出第一个只出现一次的字符的位置

SAS学习笔记之函数应用

js怎样获取某个特殊字符最后出现的位置

在Solr 7.x中,如何仅使用逗号而不是空格或其他特殊字符进行标记?