python - 替换包含特定标签的列中的值并替换它们
问题描述
我有一个 pandas 数据框,其中有一列名为 period 的列有 3 个不同的标签值,这意味着 2019 年冬季、2020 年冬季和 2021 年冬季,如下所示
我的问题是如何将这种格式替换为 2019 年冬季、2020 年冬季和 2021 年冬季的最终结果?
Period:
Q4 '19+Q1 '20
Q4 '20+Q1 '21
Q4 '21+Q1 '22
Q 表示一年中的一个季度
所以我的方法是:1)首先是用正则表达式方法来制作一个新年专栏。我在第一个 Q4 之后提取了 '19、'20、'21 年的数字
gas['year'] = gas['Period'].str.extract("([']\d\d)", expand=True)
然后我计划用冬季替换包含 Q4 和 Q1 的值
gas['Period'].str.contains('Q4')) & (gas['Period'].str.contains('Q1')) = 'winter Gregorian'
但它替换了包含 Q4 和 Q1 的整行
也试过
gas[gas['Period'].str.replace("[Q][4]..\d\d[+][Q][1]", 'winter Gregorian'), regex =False]
最终结果我想要的是:
Period
winter Gregorian 2019
winter Gregorian 2020
winter Gregorian 2021
但没用,我欢迎任何意见和建议谢谢
解决方案
我会在这里使用正则表达式捕获组。看看这个正则表达式:
(Q[0-9]) '([0-9]{2})\+(Q[0-9]) '([0-9]{2})
括号中的每个项目都是一个组,您可以在匹配后访问。例如,在Q4 '19+Q1 '20
比赛中Q4
,第一组是 ,第二组是19
,第三组是Q1
,第四组是20
。
将 Period 字符串与此正则表达式匹配后,您可以提取组匹配项以构建所需的输出格式。此代码为您提供了如何执行此操作的完整示例。
import re
import pandas as pd
df = pd.DataFrame({
"Period": [
"Q4 '19+Q1 '20 ",
"Q1 '20+Q2 '20",
"Q4 '20+Q1 '21",
"Q4 '21+Q1 '22"
]
})
pattern = "(Q[0-9]) '([0-9]{2})\+(Q[0-9]) '([0-9]{2})"
season_map = {
('Q4', 'Q1'): 'Winter',
('Q1', 'Q2'): 'Spring',
('Q2', 'Q3'): 'Summer',
('Q3', 'Q4'): 'Fall'
}
def convert_time_format(x):
match = re.match(pattern, x)
if match is not None:
season = season_map.get((match.group(1), match.group(3)))
year = match.group(2)
return season + ' ' + year
else:
return 'Failed to parse'
df.Period.map(convert_time_format)
这给出了:
0 Winter 19
1 Spring 20
2 Winter 20
3 Winter 21
推荐阅读
- api - 您将使用 API 的过程称为什么?
- python - 用于识别图像何时出现在屏幕上的区域中的 python 脚本
- node.js - 下载
of a url with minimal data usage</h1> <div id="body"><p>For the purpose of generating links to another websites I need to download content of tag.</p> <p>But I would like to use as minimal bandwidth as possible. In - javascript - l1.slice() 参数不是函数
- ios - XCode 12.3 ld:入口点 (_main) 未定义。对于架构 x86_64 clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- google-sheets - 比较 sheet1 中 sheet2 中缺失的行,并在 sheet3 中显示它们的条件
- javascript - 如何在 Webpack 中覆盖惰性 import() 解析
- python - 将系列转换为二维数组
- python - 无在 Python 编码中导致分组方法
- python - 如何获取不包括特定 RGB 值的区域的边界框