标题:以mm / dd / yyyy格式创建日期范围

时间:2018-12-28 22:05:47

标签: pandas

使用pd.date_range给出带有yyyy-mm-dd格式的日期的时间戳记以及以小时,分钟等形式的附加信息。我想从这里转到一个简单的数据框,其中仅以mm / dd / yyyy列出日期仅格式。我已经尝试将事物转换为字符串,字符串数组等,并对其进行修改,但这一切都令人费解。

有人知道直接方法吗?必须有一个。这一定是一个普遍的问题。

编辑/附录:Jason Dixon的答复打在了头上。我已经尝试了一些其他海报建议的其他方法。谢谢你们。

2 个答案:

答案 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()来首先转换该列。