将年和月列与熊猫干净地组合到单个日期列

Sam*_*Sam 5 python datetime date dataframe pandas

我有看起来像这样的数据:

+----+------+-------+
| ID | YEAR | MONTH |
+----+------+-------+
| A  | 2017 |     1 |
| B  | 2017 |     2 |
| C  | 2017 |     3 |
| D  | 2017 |     4 |
| E  | 2017 |     5 |
| F  | 2017 |     6 |
+----+------+-------+
Run Code Online (Sandbox Code Playgroud)

我想添加一个名为的新列DATE,它存储由YEARMONTH列的日期对象组成的新列。像这样的东西:

+----+------+-------+------------+
| ID | YEAR | MONTH |    DATE    |
+----+------+-------+------------+
| A  | 2017 |     1 | 2017-01-01 |
| B  | 2017 |     2 | 2017-02-01 |
| C  | 2017 |     3 | 2017-03-01 |
| D  | 2017 |     4 | 2017-04-01 |
| E  | 2017 |     5 | 2017-05-01 |
| F  | 2017 |     6 | 2017-06-01 |
+----+------+-------+------------+
Run Code Online (Sandbox Code Playgroud)

我使用以下代码创建了该列,但想知道是否有更简洁的“Pythonic”单行代码。类似的东西df['DATE']=date(df.year, df.month, 1)

import pandas as pd
from datetime import date


ID  = ['A', 'B', 'C', 'D', 'E', 'F']
YEAR = [2017, 2017, 2017, 2017, 2017, 2017]
MONTH = [1, 2, 3, 4, 5, 6]


df = pd.DataFrame({'ID': ID, 'YEAR': YEAR, 'MONTH': MONTH})


DATE = []
for y, m in zip(df.YEAR, df.MONTH):
    DATE.append(date(y, m, 1))


df['DATE'] = DATE
Run Code Online (Sandbox Code Playgroud)

cs9*_*s95 17

选项1
。通过一个数据帧切片3列- YEARMONTH以及DAY,对pd.to_datetime

df['DATE'] = pd.to_datetime(df[['YEAR', 'MONTH']].assign(DAY=1))
df

  ID  MONTH  YEAR       DATE
0  A      1  2017 2017-01-01
1  B      2  2017 2017-02-01
2  C      3  2017 2017-03-01
3  D      4  2017 2017-04-01
4  E      5  2017 2017-05-01
5  F      6  2017 2017-06-01
Run Code Online (Sandbox Code Playgroud)

选项 2
字符串连接,带有pd.to_datetime.

pd.to_datetime(df.YEAR.astype(str) + '/' + df.MONTH.astype(str) + '/01')

0   2017-01-01
1   2017-02-01
2   2017-03-01
3   2017-04-01
4   2017-05-01
5   2017-06-01
dtype: datetime64[ns]
Run Code Online (Sandbox Code Playgroud)

  • 请注意,“year”、“month”和“day”是 pandas 查找的特殊字符串。如果您的列被命名为其他名称(例如,`start_year`),则必须在转换之前重命名它们(`df.rename(columns={'start_year': 'year'})`)。 (4认同)