【问题标题】:replacing string with a different string in pandas depending on value根据值在熊猫中用不同的字符串替换字符串
【发布时间】:2021-08-15 13:39:31
【问题描述】:

我正在练习 pandas,但我有一个练习有问题

我有一个 excel 文件,其中有一列存储了两种类型的 url。

df = pd.DataFrame({'id': [], 
                   'url': ['www.something/12312', 'www.something/12343', 'www.somethingelse/42312', 'www.somethingelse/62343']})
   | id | url |
    | -------- | -------------- |
    |     | 'www.something/12312'  |
    |   | 'www.something/12343'    |
    |     | 'www.somethingelse/42312'    | 
    |    | 'www.somethingelse/62343'    | 

我应该将其转换为 id,但只有数字应该是 id 的一部分,新的 id 列应该如下所示:

df = pd.DataFrame({'id': [id_12312 , id_12343, diffid_42312, diffid_62343], 'url': ['www.something/12312', 'www.something/12343', 'www.somethingelse/42312', 'www.somethingelse/62343']})
| id | url |
| -------- | -------------- |
| id_12312    | 'www.something/12312'  |
| id_12343    | 'www.something/12343'    |
| diffid_42312    | 'www.somethingelse/42312'    | 
| diffid_62343    | 'www.somethingelse/62343'    | 

我的问题是如何只获取数字并在这种 id 的情况下替换它们? 我已经尝试过 pandas 中的替换和提取功能

id_replaced = df.replace(regex={re.search('something', df['url']): 'id_' + str(re.search(r'\d+', i).group()), re.search('somethingelse', df['url']): 'diffid_' + str(re.search(r'\d+', i).group())})
        
df['id'] = df['url'].str.extract(re.search(r'\d+', df['url']).group())

但是,他们抛出了一个错误 TypeError: expected string or bytes-like object。

抱歉代码块中的表格。当页面不在代码块中时,页面尖叫着我的代码格式不正确。

【问题讨论】:

  • 请格式化您的示例,以便它们可以重现:stackoverflow.com/questions/20109391/…
  • 格式已更正
  • diffid 到底是什么?什么时候使用id 作为前缀,什么时候使用diffid

标签: python python-3.x pandas


【解决方案1】:

这是一种解决方案,但我不太明白您何时使用id 前缀以及何时使用diffid ..

>>> df.id = 'id_'+df.url.str.split('/', n=1, expand=True)[1]
>>> df
         id                      url
0  id_12312      www.something/12312
1  id_12343      www.something/12343
2  id_42312  www.somethingelse/42312
3  id_62343  www.somethingelse/62343

或使用str.extract

>>> df.id = 'id_' + df.url.str.extract(r'/(\d+)$')

【讨论】:

  • 谢谢。对于不同的网页,前缀应该是不同的,所以当我有一个网页时,前缀是 diffid_,但是当我有网页时,前缀是 id_
  • 感谢您的帮助,我也设法解决了前缀问题:) df['id_num'] = df.url.str.extract(r'/(\d+)$').astype(str) df['id_prefix'] = np.where((df['url'].str.contains('somethingelse')), 'diffid_', 'id_') df['id'] = df['id_prefix'] + df['id_num']
猜你喜欢
  • 2017-03-12
  • 2019-06-03
  • 2022-10-13
  • 2018-08-01
  • 2019-02-06
  • 1970-01-01
  • 2019-11-23
  • 2021-09-07
相关资源
最近更新 更多