pandas 使用Python脚本从Excel文件中的slugs中删除日期

7bsow1i6  于 2023-09-29  发布在  Python
关注(0)|答案(4)|浏览(111)

我有一个很难弄清楚如何删除日期从一个excel文件的蛞蝓结束,我试图清理,以自动化的过程中,我们的任务之一。

以下是鼻涕虫的样子:

turnpike-troubadours-14-十二月-2023
摇滚乐团-2023年11月20日
一晚的蒂娜-阿-蒂娜特纳致敬-显示-12-十二月-2023
darlene-love-15-十二月-2023
蒙茅斯-公民-合唱团-欢乐-大大-17-十二月-2023
假日快递-19-十二月-2023
black-nativity-2023年12月30日

我希望他们看起来像:

收费公路行吟诗人
摇滚乐团
一晚的蒂娜·特纳致敬秀
达琳洛夫
蒙茅斯-公民-合唱团-高兴-大大
假日快报
黑人诞生
我已经尝试了各种代码,我发现在互联网上一样:

def remove_date_from_end_of_string(string):
    return string.rsplit(' ', 1)[0]
    return df

outlinks_df['Artist Path'] = outlinks_df['Artist Path'].apply(remove_date_from_end_of_string)

艺术家路径是文件中需要清理的列。当我尝试这个公式时,我一直得到一个错误,老实说,我不确定它在做什么。
我是python的新手,我正在尝试将我的团队每周做的一些繁琐的任务自动化。
非常感谢任何帮助!

3phpmpom

3phpmpom1#

如果它们都具有完全相同的格式,则可以执行以下操作:

a = "aholiday-express-19-december-2023"
print("-".join(a.split("-")[:-3]))

对每个鼻涕虫都这样做。
你的函数应该是这样的:

def remove_date_from_end_of_string(string):
    return "-".join(string.split("-")[:-3])

逻辑是每当出现“-”时就拆分字符串,然后将其连接回来,而不包括最后三个元素:)

gg0vcinb

gg0vcinb2#

你只需要把正确的分隔符(-)和调整str.rsplitmaxsplit

def remove_date_from_end_of_string(string):
    return string.rsplit('-', 3)[0] # <-- line updated

outlinks_df['Artist Path'] = (
    outlinks_df['Artist Path'].apply(remove_date_from_end_of_string)
)

请注意,您可以避免使用自定义函数,而使用pandas *String方法 *:

outlinks_df['Artist Path'].str.rsplit("-", n=3).str[0]

outlinks_df['Artist Path'].str.replace("-\d{2}-\w+-\d{4}$", "", regex=True)

# and many more variants..

输出量:

>>> print(outlinks_df)

                                    Artist Path
0                          turnpike-troubadours
1                            the-rock-orchestra
2  one-night-of-tina-a-tina-turner-tribute-show
3                                  darlene-love
4         monmouth-civic-chorus-rejoice-greatly
5                               holiday-express
6                                black-nativity
ymzxtsji

ymzxtsji3#

可以使用replace函数pandas库。

df['Artist Path'].str.replace('-\d{1,2}-[a-z]+-\d{4}$', '', regex=True)
3phpmpom

3phpmpom4#

因此,这里有一个使用Excel的可能性:

TEXTJOIN("-",1,REDUCE(IF(ISNUMBER(VALUE(TEXTSPLIT(A1,"-",,,,)*1)),"",PROPER((TEXTSPLIT(A1,"-",,,,)))),$G$2:$G$13,LAMBDA(a,b,SUBSTITUTE(a,b,OFFSET(b,0,1)))))

步骤是拆分位,用空白替换数字和月份,然后重新组合。

相关问题