You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 10:25:31