如何将DataFrame列拆分为星期、日期、时间单独列?
解决DataFrame中日期时间列拆分问题
你用固定索引切片的方式拆分Datum列完全不可靠——这种方法依赖所有字符串长度完全一致,但如果后续出现其他星期名称(比如Sonntag,长度和Samstag不一样),固定的start/end索引直接就失效了,而且当前切片取的内容也根本不是你要的星期、日期或时间。
给你两种靠谱的解决方案:
方法一:字符串分割法
利用列中固定的分隔符(逗号、Anstoß um、 Uhr)逐步拆分:
import pandas as pd df = pd.DataFrame({'Datum': ["Samstag, 12.08.2023Anstoß um 15:30 Uhr", "Samstag, 19.08.2023Anstoß um 18:30 Uhr", "Samstag, 26.08.2023Anstoß um 15:30 Uhr"], 'Begegnungen': ["TTSV SCHOTT Mainz - Borussia Dortmund", "VfL Bochum - Borussia Dortmund", "Freiburg - Borussia Dortmund"]}) # 拆分星期和剩余内容 df[['星期(Day)', '剩余']] = df['Datum'].str.split(', ', expand=True) # 拆分日期和时间相关部分 df[['日期(date)', '时间部分']] = df['剩余'].str.split('Anstoß um ', expand=True) # 去掉时间末尾的" Uhr",得到纯时间 df['时间(time)'] = df['时间部分'].str.replace(' Uhr', '') # 删除中间临时列 df = df.drop(['剩余', '时间部分'], axis=1) print(df)
方法二:正则表达式法
用正则匹配固定格式的内容,更灵活,能应对小范围格式变动:
import pandas as pd df = pd.DataFrame({'Datum': ["Samstag, 12.08.2023Anstoß um 15:30 Uhr", "Samstag, 19.08.2023Anstoß um 18:30 Uhr", "Samstag, 26.08.2023Anstoß um 15:30 Uhr"], 'Begegnungen': ["TTSV SCHOTT Mainz - Borussia Dortmund", "VfL Bochum - Borussia Dortmund", "Freiburg - Borussia Dortmund"]}) # 正则表达式匹配星期、日期、时间三部分 df[['星期(Day)', '日期(date)', '时间(time)']] = df['Datum'].str.extract(r'(.*?), (\d{2}\.\d{2}\.\d{4})Anstoß um (\d{2}:\d{2}) Uhr', expand=True) print(df)
两种方法都能准确拆分出你需要的三列,其中正则法更适合未来可能出现的格式微调,分割法更直观易懂。
内容的提问来源于stack exchange,提问作者Theresa_S
相关产品推荐
相关产品推荐

