如果作为数据框列的最后一个非空白出现,则清除尾随句点

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