python - pandas 中的高级字符串编辑
问题描述
我正在使用一个数据集,其中公司名称与我想要合并的数据集不太匹配。
作为解决方案的一部分,我想在我的数据框中的一列中编辑公司名称。假设我有一个公司名称列表,我想做的是:
diff = ['some list of tickers']
for security in df.query("tic in @diff").security.unique():
result = re.search(expression, security)[0].upper()
result = result.replace('CORPORATION', 'CORP')
result = result.replace('COMPANY', 'CO')
result = result.replace('OF','')
result = result.replace('F', '')
result = result.strip()
我认为甚至可能有一个优雅的解决方案,我可以运行自定义函数来修改单元格的值,但我对 pandas 还不够熟悉,不知道如何做到这一点。
我正在编辑的数据框是这样的。
caldt tic security curshrt
2672 1988-06-01 ITSCW Industrial Training Systems, 0
8007 1988-07-01 ITSCW Industrial Training Systems, 0
44772 1989-03-01 MMNT Momentum, Inc. 0
49865 1989-04-01 MMNT Momentum, Inc. 372
54925 1989-05-01 MMNT Momentum, Inc. 78
... ... ... ... ...
1077214 2007-06-01 ABBI Abraxis BioScience, Inc. - Common stock 4486255
1080530 2007-07-01 ABBI Abraxis BioScience, Inc. - Common stock 4659919
1083835 2007-08-01 ABBI Abraxis BioScience, Inc. - Common stock 4265095
1087148 2007-09-01 ABBI Abraxis BioScience, Inc. - Common stock 4018741
1090424 2007-10-01 ABBI Abraxis BioScience, Inc. - Common stock 4064510
我正在摆脱标点符号并更改一些缩写词和单词
解决方案
我认为您的代码可能会修改如下:
import re
diff = ['some list of tickers']
d = dict([('CORPORATION', 'CORP'), ('COMPANY', 'CO'), ('OF',''), ('F', '')])
s = df.loc[df.tic.isin(diff), 'security']
df.loc[df.tic.isin(diff), 'security'] = (s.str.findall(expression, flags=re.I).str[0].
str.upper().replace(d))
注意:expression
是您的搜索模式。
推荐阅读
- json - 使用 Decodable 解码 JSON 嵌套字典并使用 Core Data 存储它
- flutter - 带有里程碑/步骤分隔符的 CircularProgressIndicator(例如 1/3、2/3、3/3)
- mongodb - 在 Mongodb 中设置 memLimitMB 参数以获得内存限制
- generics - Kotlin 和 Java PECS
- css - 如何完全删除 md-dialog 的背景?
- typescript - 扩展 vuetify VTextField
- r - r中文件的read.table和Skype第一行
- c - 如何控制fork()的创建顺序?
- spring-boot - SpringBoot中如何注册接口和实现类(无xml,无注解)?
- spring-boot - 我想将 POST 请求中的数据保存到表中