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

时间:2019-09-24 03:28:25

标签: python datetime

我有一个数据框,其中包含年,月和日的单独列。我尝试使用以下方法将这些单独的列合并为一个日期:

df['myDt']=pd.to_datetime(df[['year','month','day']])

仅得到以下错误:“组装映射至少需要指定[年,月,日]:[天,月,年]丢失”。不知道这意味着什么。...我已经提供了相关的列。 在检查数据类型时,我发现它们的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_NGPRPUS_M 我导入数据如下: 1.导入quandl(首先使用conda安装) 2.使用Quandl的Python代码:

data = quandl.get(“ EIA / STEO_NGPRPUS_M”,authtoken =“ TOKEN”,“ 2005-01-01”,“ 2005-12-31”) 4.请注意,原始数据仅带有“值”列,而DateTime作为索引。我提取并创建了mm,yy和dd列(月,年和dd是设置为1的列向量) 我要尝试做的就是创建另一个称为“月初”的列-因此,对于每个月的每一天,该列将仅显示“ MM / YY / 1”。我将尽快尝试以下所有建议,并再次与大家联系。谢谢!

3 个答案:

答案 0 :(得分:2)

您应按以下方式使用apply方法:

from datetime import datetime
df['myDt'] = df.apply(lambda row: datetime.strptime(f"{int(row.year)}-{int(row.month)}-{int(row.day)}", '%Y-%m-%d'), axis=1)

运行示例:

>>> d = {'year': list(range(2015, 2020)), 'month': list(range(5, 10)), 'day': >> list(range(20, 25))}
>> df = pd.DataFrame(d)
>> df

    year    month   day myDt
0   2015    5       20  2015-05-20
1   2016    6       21  2016-06-21
2   2017    7       22  2017-07-22
3   2018    8       23  2018-08-23
4   2019    9       24  2019-09-24

答案 1 :(得分:1)

您可以将thisconst self = this; if (event.key == "ArrowRight") { if (self.midMenuIndex < 2) { self.midMenuIndex++; } } else if (event.key == "ArrowLeft") { if (self.midMenuIndex > 0) { self.midMenuIndex--; } } $('.dots li').each(function() { console.log(parseInt($(this).index()) == self.midMenuIndex); }); 一起使用。

datetime.datetime

对于.apply()

看起来您的代码很好。请参见jQuery's documentationpandas.to_datetime documentation

import datetime

d = datetime.datetime(2020, 5, 17)
date = d.date()

输出

pandas.to_datetime(df)

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

假设您的YEAR,MONTH和DAY列分别标记为df = pd.DataFrame({'year': [2015, 2016], 'month': [2, 3], 'day': [4, 5]}) pd.to_datetime(df[["year", "month", "day"]]) 0 2015-02-04 1 2016-03-05 dtype: datetime64[ns] yy。而且您更希望保持列名不变。在这种情况下,您可以按照以下步骤进行操作。

mm

输出

dd

答案 2 :(得分:1)

这里有两个衬里:

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')

输出

    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