提问人:DataminerPython3 提问时间:10/18/2023 更新时间:10/18/2023 访问量:37
如何在 pandas.core.series.Series 对象中将前导零添加到日和月
How to add leading zero to day and month in pandas.core.series.Series object
问:
我有一个大型数据集,该数据集没有月份或日期的前导零。使用 datetime 时,预计 day 和 month 将具有前导零。
以下是日期在我的数据集中的显示方式: 1/1/2023
如何将其转换为: 01/01/2023
尝试应用一种格式,但它似乎仅适用于整数: print(“{:02d}”.format(number)) --> 这适用于为整数添加前导零
试: merged_dfs[“日期”] = merged_dfs.apply(lambda x: “{month:02}-{day:02}-{year}”.format(month=x.month,day=x.day,year=x.year))
这将返回错误:AttributeError: 'Series' object has no attribute 'month'
- 试: merged_dfs['日期'] = merged_dfs.ts_placed.map(lambda x: '{year}-{month:02}'.format(year=x.year,month=x.month))
这将返回错误:AttributeError:“DataFrame”对象没有属性“ts_placed”
- 试: merged_dfs[“日期”] = pd.to_datetime(merged_dfs[“日期”], format=“%-d-%-m-%Y”)
这返回了一个错误:ValueError:“-”是格式为“%-d-%-m-%Y”的错误指令
- 试: merged_dfs[“日期”]=merged_dfs[“日期”].apply(pd.to_datetime, format=“%d-$m-%Y”)
此返回错误:
ValueError:时间数据“1/1/2023”与位置 0 处的格式“%d-$m-%Y”不匹配。您可能想尝试:
- 如果字符串的格式一致,则传递;
- 如果您的字符串都是ISO8601但不一定采用完全相同的格式,则通过;
- 传递 ,并且将单独推断每个元素的格式。您可能希望与此一起使用。format
format='ISO8601'
format='mixed'
dayfirst
答:
您可以尝试以下操作:
df = pd.DataFrame({'Date':['1/1/2023', '1/2/2023', '1/15/2023', '10/1/2023', '12/15/2023']})
df['Date_2'] = pd.to_datetime(df['Date'], format = '%m/%d/%Y').dt.strftime('%m/%d/%Y')
df
输出:
Date Date_2
0 1/1/2023 01/01/2023
1 1/2/2023 01/02/2023
2 1/15/2023 01/15/2023
3 10/1/2023 10/01/2023
4 12/15/2023 12/15/2023
重用 @Scott 的例子,一种与格式无关的方法可能是使用正则表达式和 str.replace
来查找个位数并填充它们:
df['Date2'] = df['Date'].str.replace(r'\b(\d)\b', r'0\1', regex=True)
输出:
Date Date2
0 1/1/2023 01/01/2023
1 1/2/2023 01/02/2023
2 1/12/2023 01/12/2023
3 10/1/2023 10/01/2023
4 15/12/2023 15/12/2023
评论