Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将年和月列干净地组合到一个日期列中_Python_Pandas_Date_Datetime_Dataframe - Fatal编程技术网

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'})
)。第二种方法可以正常工作。