Python 将年和月列干净地组合到一个日期列中
我有如下数据:Python 将年和月列干净地组合到一个日期列中,python,pandas,date,datetime,dataframe,Python,Pandas,Date,Datetime,Dataframe,我有如下数据: +----+------+-------+ | ID | YEAR | MONTH | +----+------+-------+ | A | 2017 | 1 | | B | 2017 | 2 | | C | 2017 | 3 | | D | 2017 | 4 | | E | 2017 | 5 | | F | 2017 | 6 | +----+------+-------+ +----+------+-------+
+----+------+-------+
| ID | YEAR | MONTH |
+----+------+-------+
| A | 2017 | 1 |
| B | 2017 | 2 |
| C | 2017 | 3 |
| D | 2017 | 4 |
| E | 2017 | 5 |
| F | 2017 | 6 |
+----+------+-------+
+----+------+-------+------------+
| 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 |
+----+------+-------+------------+
我想添加一个名为DATE
的新列,它存储由YEAR
和MONTH
列的日期对象组成的新列。大概是这样的:
+----+------+-------+
| ID | YEAR | MONTH |
+----+------+-------+
| A | 2017 | 1 |
| B | 2017 | 2 |
| C | 2017 | 3 |
| D | 2017 | 4 |
| E | 2017 | 5 |
| F | 2017 | 6 |
+----+------+-------+
+----+------+-------+------------+
| 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)的东西
选项1
将包含三列的数据帧片段传递到
YEAR
、MONTH
和DAY
,以pd.to\u 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\u 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]
请注意,
年
、月
和日
是熊猫搜索的特殊字符串。如果您的列被命名为其他名称(例如,start\u year
),则必须在转换之前重命名它们(df.rename(columns={'start\u year':'year'})
)。第二种方法可以正常工作。