如何在 pandas.core.series.Series 对象中将前导零添加到日和月

How to add leading zero to day and month in pandas.core.series.Series object

提问人:DataminerPython3 提问时间:10/18/2023 更新时间:10/18/2023 访问量:37

问:

我有一个大型数据集,该数据集没有月份或日期的前导零。使用 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但不一定采用完全相同的格式,则通过; - 传递 ,并且将单独推断每个元素的格式。您可能希望与此一起使用。formatformat='ISO8601'format='mixed'dayfirst

python-3.x pandas 数据帧 日期时间

评论


答:

2赞 Scott Boston 10/18/2023 #1

您可以尝试以下操作:

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
1赞 mozway 10/18/2023 #2

重用 @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

评论

0赞 DataminerPython3 10/20/2023
我能够使用 Scott 提出的第一种方法获得预期的结果!我尝试过类似的命令,但根据我在网上阅读的一些评论添加了减号。我想我应该在没有减号的情况下尝试一下。谢谢!