Python 熊猫中的高级字符串编辑
我正在使用一个数据集,其中公司名称与我希望合并的数据集不太匹配 作为解决方案的一部分,我想在数据框中的一列中编辑公司名称。假设我有一个公司名称列表,我想做的是:Python 熊猫中的高级字符串编辑,python,pandas,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.r
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还不太熟悉,不知道如何做到这一点
我在像这样的LOK上编辑的数据帧
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
是您的搜索模式。Wow,太漂亮了。非常感谢你!我在最后一行代码中得到了&:'str'和'int'的错误不支持的操作数类型,但我不确定它认为int来自何处。有什么想法吗?你能分享一下expression
的价值和diff
的价值吗?我想我已经很接近了s.str.findall(表达式,'security')[0]
应该是s.str.findall(表达式)
,因为返回的对象是pd.Series。该系列中的每个元素都是一个应该是匹配项的列表。出于某种原因,列表中的元素似乎没有正确地计算表达式(尽管我已经让它用于其他测试)。你能解释一下最后一点应该做什么吗?我可能会用一个丑陋但简单的方法来解决你在findall
上的问题。这是我的错别字。我没有用于测试的diff
和expression
,所以我没有意识到这个打字错误。这就是为什么我要diff
和expression
。我修改了答案来修正所有的打字错误。你能试一下经过编辑的答案吗?