如果作为数据框列的最后一个非空白出现,则清除尾随句点
Clean trailing period if present as last non whitespace of dataframe column
这是我正在处理的数据示例(第一行是列名):
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)
它的工作是匹配一个或多个非空白字符,后跟文字句点,后跟零个或多个空格,直到到达行尾。
我的objective是为了减少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
这是我正在处理的数据示例(第一行是列名):
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)
它的工作是匹配一个或多个非空白字符,后跟文字句点,后跟零个或多个空格,直到到达行尾。
我的objective是为了减少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