python - Pandas 在第一个 % 符号上拆分列,在第二个字母上
问题描述
我们有以下数据框
# raw_df
print(raw_df.to_dict())
{'Edge': {1: '-1.9%-2.2%', 2: '+5.8%-9.4%', 3: '+3.5%-7.2%'}, 'Grade': {1: 'D+D', 2: 'BF', 3: 'B-F'}}
我们正在尝试将这 2 列拆分为 4 列。Edge列应该在第一个 之后拆分,%
而Grade列应该在第二个大写字母出现之前拆分。输出应如下所示:
output_df
edge_1 edge_2 grade_1 grade_2
-1.9% -2.2% D+ D
+5.8% -9.4% B F
+3.5% -7.2% B- F
我们必须raw_df[['t1_grade', 't2_grade']] = raw_df['Grade'].str.extractall(r'([A-Z])').unstack()
拆分Grade列,但是这里去掉了 + 和 -,这是一个问题。而且我们不确定在第一个 % 出现后如何拆分Edge列。
解决方案
我们可以str.extract
如下使用:
df["edge_1"] = df["Edge"].str.extract(r'^([+-]?\d+(?:\.\d+)?%)')
df["edge_2"] = df["Edge"].str.extract(r'([+-]?\d+(?:\.\d+)?%)$')
df["grade_1"] = df["Grade"].str.extract(r'^([A-Z][+-]?)')
df["grade_2"] = df["Grade"].str.extract(r'([A-Z][+-]?)$')
这里的策略是使用正则表达式从两个当前列中提取第一个/最后一个百分比/等级。
推荐阅读
- xamarin - Azure DevOps VSTS CICD:Xamarin.iOS 任务失败并出现错误错误:
- coldfusion - 在 fancybox 中加载外部站点
- angular - 在 nxg-bootstrap 日期选择器中设置可见日期
- c# - 如何自动更新数据库表?
- python - 如何在 python 字典中找到最负面的键?
- html - bootstrap 4内的SVG线,flex div不可见
- azure-devops - 如何使用 powershell 使用 azure 发布管道变量?
- c# - 使用 Microsoft Graph API 将文件上传到 MVC 应用程序中的 onedrive,权限错误
- php - 将图像添加到现有数据库
- java - 如何使用选项框中的按钮操作事件关闭 Joptionpane showOptionDialog