首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用熊猫清理和操作专栏

使用熊猫清理和操作专栏
EN

Stack Overflow用户
提问于 2021-05-18 20:17:07
回答 1查看 144关注 0票数 0

我的数据集中有以下列,数据来自我的数据源:

代码语言:javascript
复制
Salary
~£2000
~£2000.15 per week
~£2000.50 per month
~£2000 - ~£5000 range
100000INR
INR

现在,我想创建一个新列,它应该如下所示:

代码语言:javascript
复制
Salary_clean
2000
104007.8
240006
35000
964
0

因此,下面的逻辑将会遵循(所有的salareis最终都是一年一次的):

  1. 当列有一个独立的数字表示年薪已经显示,并且当薪资旁边写有“每周”时,不需要采取任何行动
  2. ,然后将该薪资乘以52
  3. ,当薪资有“每个月”写在旁边时,然后将该薪资乘以12
  4. ,当薪资有"x-y范围“写在旁边时,然后计算范围的中位数,这将是正确的薪资

H 111,当薪资有像INR这样的”by货币“时,然后使用该货币与GBP(Pounds)

  1. When的当前换算率计算薪资,该货币只有一个货币代码,如"XXX",然后将薪资作为0

我怎样才能做到这一点?

EN

回答 1

Stack Overflow用户

发布于 2021-05-18 22:09:45

免责声明:这段代码可能很危险(使用eval函数时没有任何警告)。此外,代码完全处于优化状态,但具有紧凑的优点。

代码语言:javascript
复制
d = {r'~[^\d]+': r'',
     r'per week': r'* 52',
     r'per month': r'* 12',
     r'(.*) - (.*) range': r'(\1 + \2) / 2',
     r'\dINR': r' * 0.0096',
     r'^[^\W\d]*$': r'0'}

df['Salary_clean'] = df['Salary'].replace(d, regex=True).apply(eval)
代码语言:javascript
复制
>>> df
                  Salary  Salary_clean
0                 ~£2000        2000.0
1     ~£2000.15 per week      104007.8
2    ~£2000.50 per month       24006.0
3  ~£2000 - ~£5000 range        3500.0
4              100000INR          96.0
5                    INR           0.0

replace方法的结果:

代码语言:javascript
复制
>>> df['Salary'].replace(d, regex=True)

0                 2000
1         2000.15 * 52
2         2000.50 * 12
3    (2000 + 5000) / 2
4       10000 * 0.0096
5                    0
Name: Salary, dtype: object
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67593389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档