我有一个数据帧“trial\u df”,列值如下:
Names
GHAITHA & AL MOOSA
ASEEL ELECTRONICS T
SUNRISE SUPERMARKET-QU
EMARAT-AL SAFIYAH(6735
LULU CENTRE LLC EFT TE
MAX
THEMAX
THE LULU
GHAITHA 123
SUNRISE %$#
要求:
1)只提取空格、特殊字符前后的字符串。你知道吗
例如:“ASEEL ELECTRONICS T”将变成“ASEEL ELECTRONICS”
2)但仅限于以下条件:
a)第二串长度应大于2
b)第二个字符串应为字母数字
例如:“GHAITHA&AL-MOOSA”将只是“GHAITHA”,因为空格后面的第二个字符串是“&;”(两个条件都失败:不是字母数字,长度不大于2)
例如:“MAX”将是“MAX”,因为它只有一个字符串。同样地,“露露”将和它已经只有的两条弦一样。你知道吗
最终输出:
Names
GHAITHA
ASEEL ELECTRONICS
SUNRISE SUPERMARKET-QU
EMARAT
LULU CENTRE
MAX
THEMAX
THE LULU
GHAITHA
SUNRISE
我的职责是满足以下要求:
def remove_strings(df, col):
for i in df.index:
x = df.at[i, col]
x = x.split(' ')
if len(x) > 1:
if len(x[1]) > 2:
x[1] = ''.join(e for e in x[1] if e.isalnum())
x = ' '.join(x[0:2])
df.at[i, col] = x
else:
df.at[i, col] = x[0]
else:
df.at[i, col] = df.at[i, col]
#calling my function
remove_strings(df=trial_df, col='Names')
我的函数的问题:虽然它解决了需求,但是它没有得到很好的优化。 我的数据有100多万行,所以它循环了那么多次,这非常耗时。 有没有一个非常好的优化方法来解决我的需求?你知道吗
我们可能希望在这里设计的表达方式相当复杂。也许,最好将任务分解,然后设计更简单的表达式。例如,
THE LULU
在我们通过regex引擎运行它之前,可以简单地排除这种情况。你知道吗我对表达式的部分尝试是:
但是,我敢肯定,它不会在其他一些输入,我们可能已经和这里没有列出的工作。你知道吗
DEMO
这个想法有三个步骤:
^([A-Z\s]{3,}?)
相关问题 更多 >
编程相关推荐