从pandas http://pandas.pydata.org/pandas-docs/stable/generated/pandas.to_datetime.html的文档中可以看到多列的集合,例如:解释了日期列到单个列。
>>> df = pd.DataFrame({'year': [2015, 2016],
'month': [2, 3],
'day': [4, 5]})
>>> pd.to_datetime(df)
0 2015-02-04 1 2016-03-05 dtype: datetime64[ns]
但我怎样才能进行相反的转变?
答案 0 :(得分:2)
您可以使用dt
访问者访问日期时间的组成部分,请注意to_datetime
返回Series
,以便我转换为df以添加列:
In [71]:
df1 = pd.to_datetime(df)
df1 = df1.to_frame()
df1 = df1.rename(columns={0:'date'})
df1
Out[71]:
date
0 2015-02-04
1 2016-03-05
In [72]:
df1['year'], df1['month'], df1['day'] = df1['date'].dt.year, df1['date'].dt.month, df1['date'].dt.day
df1
Out[72]:
date year month day
0 2015-02-04 2015 2 4
1 2016-03-05 2016 3 5
每个组件的dtypes为int64
:
In [73]:
df1.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2 entries, 0 to 1
Data columns (total 4 columns):
date 2 non-null datetime64[ns]
year 2 non-null int64
month 2 non-null int64
day 2 non-null int64
dtypes: datetime64[ns](1), int64(3)
memory usage: 144.0 bytes
答案 1 :(得分:1)
.dt.strftime('%Y %-m %-d').str.split()
将撤消操作
df = pd.DataFrame({'year': [2015, 2016],
'month': [2, 3],
'day': [4, 5]})
pd.to_datetime(df)
0 2015-02-04
1 2016-03-05
dtype: datetime64[ns]
pd.to_datetime(df).dt.strftime('%Y %-m %-d').str.split()
0 [2015, 2, 4]
1 [2016, 3, 5]
dtype: object
或者使用花哨的正则表达式提取物
regex = r'(?P<year>\d+) (?P<month>\d+) (?P<day>\d+)'
pd.to_datetime(df).dt.strftime('%Y %-m %-d') \
.str.extract(regex, expand=True).astype(int)