2016-08-24 3 views
2

パンダの文書より、http://pandas.pydata.org/pandas-docs/stable/generated/pandas.to_datetime.html。日付列を1つにまとめて説明します。パンダ分解カラム

>>> 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

?日時を構成部分に戻したいのですか? df ['year']、df ['month']、df ['day'] = df ['Date'] .dt.year、df ['Date'] .dt.month、df ['日付]] .dt.day' – EdChum

+0

ありがとうございます。これが望ましい出力です。 –

答えて

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) 

enter image description here

2

あなたはto_datetime戻っSeriesはので、私は列を追加するために、DFに変換してることに注意し、dtアクセサを使用して日時の構成部品にアクセスすることができます。

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 
+0

また、 'df1.date.apply(operator.attrgetter( 'year'、 'month'、 'day'))' –

+0

@JonClementsを使ってコンポーネントを取得することもできます。ベクトル化された解が存在するとき、 '.str'や' .dt'演算の中には 'apply'や' map'よりも遅いものがあるように見えるかもしれませんが、タプルを返すので、各要素にアクセスする – EdChum

関連する問題