下面是我正在处理的数据示例(第一行是列名(:
DENOMINAZIONE;ATC;PRINCIPIO ATTIVO;TITOLARE;AIC
ABASAGLAR;A10AE04;INSULINA GLARGINE;ELI LILLY NEDERLAND B.V.;043658
ABASRIA;A10AE04;INSULIN GLARGINE;ELI LILLY REGIONAL OPERATIONS GMBH.;043658
ABECMA;L01;IDECABTAGENE VICLEUCEL;CELGENE EUROPE BV;049604
ABEVMY;L01XC07;BEVACIZUMAB;MYLAN IRE HEALTHCARE LTD ;049452
ABILIFY MAINTENA;N05AX12;ARIPIPRAZOLE;OTSUKA PHARMACEUTICAL EUROPE LTD. ;043143
ABILIFY MAINTENA;N05AX12;ARIPIPRAZOLE;OTSUKA PHARMACEUTICAL EUROPE LTD;043143
我需要消除最后一个"。"使得例如最后两条线变得相同。我还需要考虑到,有时会有领先或落后的空白,可能不止一个。
CSV文件被读取到Pandas.DataFrame comp_df中,我在上面尝试了以下行:
comp_df.TITOLARE.str.replace(r".+.s*$", "", regex=True)
它的工作是匹配一个或多个非空白字符,后面跟着一个文字周期,后面跟着零或多个空格,直到到达行的末尾。
我的目标是减少TITOLARE系列中字符串的可变性。
问题是匹配的行被正确替换,但不匹配的行返回为空。
我该如何解决这个问题?
我无法重现为什么不匹配的行被返回为空,但如果您将示例数据加载为csv,将分隔符设置为;
,并使用可选空白字符之间的s*.s*$
仅匹配字符串末尾的点,则您将得到所需的替换,而不匹配的行将保持不变。
示例
import pandas as pd
comp_df = pd.read_csv("file.csv", sep=";")
comp_df.TITOLARE = comp_df.TITOLARE.str.replace(r"s*.s*$", "")
print(comp_df)
输出
DENOMINAZIONE ATC PRINCIPIO ATTIVO TITOLARE AIC
0 ABASAGLAR A10AE04 INSULINA GLARGINE ELI LILLY NEDERLAND B.V 43658
1 ABASRIA A10AE04 INSULIN GLARGINE ELI LILLY REGIONAL OPERATIONS GMBH 43658
2 ABECMA L01 IDECABTAGENE VICLEUCEL CELGENE EUROPE BV 49604
3 ABEVMY L01XC07 BEVACIZUMAB MYLAN IRE HEALTHCARE LTD 49452
4 ABILIFY MAINTENA N05AX12 ARIPIPRAZOLE OTSUKA PHARMACEUTICAL EUROPE LTD 43143
5 ABILIFY MAINTENA N05AX12 ARIPIPRAZOLE OTSUKA PHARMACEUTICAL EUROPE LTD 43143