在 Python 中组合年、月和日以创建日期

Che*_*het 11 python datetime

我有一个数据框,它由年、月和日的单独列组成。我尝试使用以下方法将这些单独的列组合成一个日期:

df['myDt']=pd.to_datetime(df[['year','month','day']])
Run Code Online (Sandbox Code Playgroud)

只会得到以下错误:“组装映射需要至少指定 [年、月、日]:[日、月、年] 缺失”。不知道这意味着什么......我已经提供了相关的专栏。在检查数据类型时,我发现它们的 Year、Month 和 Day 列是 int64。这会引起问题吗?谢谢,切特

谢谢大家发帖。按照建议,我首先发布示例数据集: Value mm yy dd Date
2018-11-30 88.550067 11 2018 1 2018-12-31 88.906290 12 2018 1 2019-01-31 88.723000 1 2019 1 2019-02-28 89.509179 2 2019 1 2019-03-31 90.049161 3 2019 1 2019-04-30 90.523100 4 2019 1 2019-05-31 90.102484 5 2019 1 2019-06-30 91.179400 6 2019 1 2019-07-31 90.963570 7 2019 1 2019-08-31 92.159170 8 2019 1

数据来源为:https ://www.quandl.com/data/EIA/STEO_NGRPPUS_M 我导入的数据如下: 1.导入quandl(先用conda install) 2.用Quandl的Python代码:

data=quandl.get("EIA/STEO_NGRPPUS_M", authtoken="TOKEN","2005-01-01","2005-12-31") 4. 需要注意的是,原始数据仅带有 Value 列,和日期时间作为索引。我提取并创建了 mm、yy 和 dd 列(月、年和 dd 是一个设置为 1 的列向量)我想要做的就是创建另一个名为“本月的第一天”的列 - 所以对于每一天每个月,该列只会显示“MM/YY/1”。我将很快尝试下面的所有建议,然后回复你们。谢谢!!

Cyp*_*erX 9

解决方案

您可以datetime.datetime.apply().

import datetime

d = datetime.datetime(2020, 5, 17)
date = d.date()
Run Code Online (Sandbox Code Playgroud)

为了 pandas.to_datetime(df)

看起来你的代码没问题。请参阅pandas.to_datetime文档如何在 Pandas 中将列转换为一个日期时间列?.

df = pd.DataFrame({'year': [2015, 2016],
                   'month': [2, 3],
                   'day': [4, 5]})
pd.to_datetime(df[["year", "month", "day"]])
Run Code Online (Sandbox Code Playgroud)

输出

0   2015-02-04
1   2016-03-05
dtype: datetime64[ns]
Run Code Online (Sandbox Code Playgroud)

如果您的 YEAR、MONTH 和 DAY 列有不同的标题怎么办?

比方说,你的年,月,日柱为标记yymmdd分别。而且您更喜欢保持列名不变。在这种情况下,您可以按如下方式进行。

0   2015-02-04
1   2016-03-05
dtype: datetime64[ns]
Run Code Online (Sandbox Code Playgroud)

输出

0   2015-02-04
1   2016-03-05
dtype: datetime64[ns]
Run Code Online (Sandbox Code Playgroud)

  • 处理日期时间的一个很好的包是“lubridate”。使用例如“ymd()”函数来解决您的问题。 (2认同)

Gra*_*non 6

这是一个两线:

df['dateInt']=df['year'].astype(str) + df['month'].astype(str).str.zfill(2)+ df['day'].astype(str).str.zfill(2)
df['Date'] = pd.to_datetime(df['dateInt'], format='%Y%m%d')
Run Code Online (Sandbox Code Playgroud)

输出

    year  month day dateInt     Date
0   2015    5   20  20150520    2015-05-20
1   2016    6   21  20160621    2016-06-21
2   2017    7   22  20170722    2017-07-22
3   2018    8   23  20180823    2018-08-23
4   2019    9   24  20190924    2019-09-24
Run Code Online (Sandbox Code Playgroud)