python - 如何在熊猫数据框中隔离部分字符串
问题描述
我有一个包含一列字符串的数据框。我想取出每一行中每个字符串的一部分,即年份,然后创建一个新列并将其分配给该列。我的问题是隔离字符串的最后一部分。一个例子可能是:'TON GFR 2018 N' 对于这个字符串,我可以通过运行以下之一来执行(为此,我想隔离 18 而不是 2018)。
new_data['Year'] = pd.DataFrame([str(ele[1])[:2] for ele in list(new_data['Name'].str.split('20'))])
new_data['Year'] = new_data['Name'].str.split('20').str[1]
new_data['Year'] = new_data['Year'].str[:2]
但是,我也遇到这样的名称:“TON RO20 2018 N”或 TON 2020 N,然后它就不起作用了。我还在数据框中的不同行中遇到不同数量的空格,因此无法计算字符串中的空格数。
我的问题有什么聪明的解决方案吗?
解决方案
用于.str.extract()
提取以 开头的 4 位字符串20
并获取最后 2 位,如下:
new_data['Year'] = new_data['Name'].str.extract(r'20(\d\d)')
如果要确保 4 位字符串不是较长字符串/数字的一部分,可以进一步使用正则表达式元字符\b
(单词边界)来包围目标字符串,如下所示:
new_data['Year'] = new_data['Name'].str.extract(r'\b20(\d\d)\b')
演示
输入数据:
print(new_data)
Name
0 TON GFR 2018 N
1 TON RO20 2018 N
2 TON 2020 N
结果:
print(new_data)
Name Year
0 TON GFR 2018 N 18
1 TON RO20 2018 N 18
2 TON 2020 N 20
推荐阅读
- python - 我想在产品有折扣价时显示折扣价
- python - 使用 QAbstractTableModel 在 pyqts QTableView 中插入和删除行
- python - 使用窗口和层次逻辑使用 Pandas 创建计算列
- azure - Azure ADDS 的域控制器策略
- algorithm - 如何找到具有 k 个负加权边的最短路径?
- c# - 记录 ASP.net 核心 Lambda 应用程序日志
- windows - Using git submodules as junctions in Windows
- apache-spark - Azure Data Lake Gen 2 存储中的 Parquet 与 Delta 格式
- python - 升级到最新的 moto 版本(1.3.15 和 1.3.16)后测试中断
- slurm - 作业未获得请求的内存