使用pd.date_range给出带有yyyy-mm-dd格式的日期的时间戳记以及以小时,分钟等形式的附加信息。我想从这里转到一个简单的数据框,其中仅以mm / dd / yyyy列出日期仅格式。我已经尝试将事物转换为字符串,字符串数组等,并对其进行修改,但这一切都令人费解。
有人知道直接方法吗?必须有一个。这一定是一个普遍的问题。
编辑/附录:Jason Dixon的答复打在了头上。我已经尝试了一些其他海报建议的其他方法。谢谢你们。
答案 0 :(得分:1)
有几种解决方案,但我相信它们都将涉及Python字符串格式。
Pandas允许您编写一个函数-例如,将日期转换为字符串-然后将该函数应用于列的每一行。此功能使用了Pandas中的apply()函数。
将日期转换为字符串的功能:
def convert_date_standard_string(datelike_object):
"""
Return string version of date in format mm/dd/yyyy
Parameters
-----------
datelike_object
A value of type date, datetime, or Timestamp.
(e.g., Python datetime.datetime, datetime.date,
Pandas Timestamp)
"""
return "{:%m/%d/%Y}".format(datelike_object)
此功能大部分是文档。关键部分是return "{:%m/%d/%Y}".format(datelike_object)
,它使用Python字符串格式将日期设置为所需的格式。
这是一个示例数据框架,其中包含从date_range函数创建的列。
>>> dates_list = pd.date_range(start="01/01/2019", end="01/31/2019")
>>> df = pd.DataFrame(dates_list, columns=["Dates"])
>>> df
Dates
0 2019-01-01
1 2019-01-02
2 2019-01-03
3 2019-01-04
4 2019-01-05
5 2019-01-06
6 2019-01-07
7 2019-01-08
8 2019-01-09
9 2019-01-10
10 2019-01-11
...
27 2019-01-28
28 2019-01-29
29 2019-01-30
30 2019-01-31
注意:尽管仅显示年,月和日的日期,但每个值实际上也保存了时间信息,如操作指出。另外,OP不需要格式。
>>> df["Dates"].loc[0]
Timestamp('2019-01-01 00:00:00')
以下是将上面创建的自定义函数应用于此列的语法:
df["Dates"].apply(convert_date_standard_string)
通常,我将创建一个新列来存储转换后的值,如下所示:
>>> df["Dates - mm/dd/yyyy"] = df["Dates"].apply(convert_date_standard_string)
>>> df
Dates Dates - mm/dd/yyyy
0 2019-01-01 01/01/2019
1 2019-01-02 01/02/2019
2 2019-01-03 01/03/2019
3 2019-01-04 01/04/2019
4 2019-01-05 01/05/2019
5 2019-01-06 01/06/2019
6 2019-01-07 01/07/2019
7 2019-01-08 01/08/2019
8 2019-01-09 01/09/2019
9 2019-01-10 01/10/2019
10 2019-01-11 01/11/2019
...
27 2019-01-28 01/28/2019
28 2019-01-29 01/29/2019
29 2019-01-30 01/30/2019
30 2019-01-31 01/31/2019
为了证明新列是字符串:
>>> df["Dates - mm/dd/yyyy"].loc[0]
'01/01/2019'
>>> type(df["Dates - mm/dd/yyyy"].loc[0])
<class 'str'>
答案 1 :(得分:0)
您可以在包含'%m/%d/%Y'
个条目的列上使用dt.strftime()
(在情况下使用datetime64
模式)。如果它们还不是这种格式,请尝试通过在其上运行pd.to_datetime()
来首先转换该列。