列中所有值的条件字符串操作,Pandas,Python

2024-05-16 08:29:05 发布

您现在位置:Python中文网/ 问答频道 /正文

给定这样的数据帧:

import pandas as pd

DF = pd.DataFrame({'COL1': ['A', 'B', 'C', 'D',], 
                   'COL2': ['gp.se', 'https://www.expressen.se/', 'http://friatider.se', 'http://www.klimatupplysningen.se']})
DF

我想检查COL2的每个值,并应用一些老式的字符串编辑方法,如下所示:

if string.starstwith('https://www'):
string.split('www.')[1][:-1])
elif string.startswith('http://') and string.endswith('/'):
string.split('www.')[1][:-1]

然后,我想在数据框的同一单元格中重新分配新编辑的字符串。结果应该是这样的:

DF = pd.DataFrame({'COL1': ['A', 'B', 'C', 'D',], 
                       'COL2': ['gp.se', 'expressen.se', 'friatider.se', 'klimatupplysningen.se']})
    DF

有没有办法使用df.loc优雅地替换字符串,重用原始字符串的一部分,并应用我熟悉的if/else、startswith/endswith、string切片方法

我知道replace函数,但我更喜欢这种有条件的方式(我的实际df要大得多,有更多的值,我希望避免一个接一个地替换它们)


Tags: 数据字符串httpshttpdataframedfstringwww
2条回答

另一种方法是使用regex

import pandas as pd

df = pd.DataFrame({'COL1': ['A', 'B', 'C', 'D',], 
                   'COL2': ['gp.se', 'https://www.expressen.se/', 'http://friatider.se', 'http://www.klimatupplysningen.se']})


pattern = r'https{0,1}://w{0,3}\.{,1}'
print(df['COL2'].str.replace(pattern, '').str.strip('/'))

您可以使用^{}^{}以及./(而不是像http://www这样的字母):

L = ['https://www','https://','http://www','http://']
DF['COL2'] = DF['COL2'].replace(L, '', regex=True).str.strip('[./]')
print (DF)
  COL1                   COL2
0    A                  gp.se
1    B           expressen.se
2    C           friatider.se
3    D  klimatupplysningen.se

相关问题 更多 >