【问题标题】:Cleanly combine year and month columns to single date column with pandas使用 pandas 将年月列干净地组合为单个日期列
【发布时间】:2018-06-26 13:25:36
【问题描述】:

我的数据如下所示:

+----+------+-------+
| ID | YEAR | MONTH |
+----+------+-------+
| A  | 2017 |     1 |
| B  | 2017 |     2 |
| C  | 2017 |     3 |
| D  | 2017 |     4 |
| E  | 2017 |     5 |
| F  | 2017 |     6 |
+----+------+-------+

我想添加一个名为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 |
+----+------+-------+------------+

我使用以下代码来创建列,但想知道是否有更简洁的“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

【问题讨论】:

    标签: python pandas date datetime dataframe


    【解决方案1】:

    选项 1
    将具有 3 列的数据帧切片 - YEARMONTHDAY 传递给 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
    

    选项 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]
    

    【讨论】:

    • 请注意,yearmonthday 是 pandas 查找的特殊字符串。如果您的列被命名为其他名称(例如,start_year),您必须在转换之前重命名它们(df.rename(columns={'start_year': 'year'}))。
    • 第二种方法没有任何异常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-21
    • 2019-02-20
    • 2019-07-11
    • 1970-01-01
    • 2018-06-17
    • 2022-07-22
    • 1970-01-01
    相关资源
    最近更新 更多