読者です 読者をやめる 読者になる 読者になる

東京に棲む日々

データ分析、統計、ITを勉強中。未だ世に出ず。

Python - pandas練習2(日付の扱い)

以下のデータを読み込む。

f:id:High_School_Student:20140706114924j:plain


import numpy as np
import pandas as pd
from pandas import Series, DataFrame
from datetime import datetime
import time

 

d1 = pd.read_csv('C:\パス\Page_A.csv')

d1

     time_gmt            time             ip page
0  1396321984  2014/4/1 12:13    11.86.11.66    A
1  1396318328  2014/4/1 11:12   10.43.126.16    A
2  1396328719  2014/4/1 14:05    58.70.19.72    A
3  1396332667  2014/4/1 15:11   119.18.18.38    A
4  1396337510  2014/4/1 16:31  130.12.25.122    A


type( d1.ix[0, 'time_gmt'] )         # numpy.int64
type( d1.ix[0, 'time'] )                 # str
type( d1.ix[0, 'ip'] )                     # str
type( d1.ix[0, 'page'] )                # str

 


### str型のtime変数('2014/4/1 12:13'など)に関して ###

d1.ix[0,'time']                             # '2014/4/1 12:13'
date1 = datetime.strptime(d1.ix[0,'time'], '%Y/%m/%d %H:%M')               # strから、datetime.datetime型への変換

date1

datetime.datetime(2014, 4, 1, 12, 13)


type( date1 )                           # datetime.datetime


date1.year                              # 2014
date1.month                           # 4
date1.day                               # 1
date1.hour                              # 12
date1.minute                          # 13
date1.second                         # 0
date1.microsecond                # 0

 

date1.weekday()                    # 1

# 0:Mon, 1:Tue, ,,, 6:Sun、よって1は火曜

 


date2 = datetime.strptime(d1.ix[1,'time'], '%Y/%m/%d %H:%M')
date2

datetime.datetime(2014, 4, 1, 11, 12)


# datetime.datetime型には比較演算が使える
date1 < date2                # False
date1 > date2                # True
date1 == date2              # False
date1 != date2               # True


diff1 = date1 - date2
diff1

datetime.timedelta(0, 3660) 

type(diff1)          # datetime.timedelta

 

diff1.days               # 0
diff1.seconds         # 3660
# 61*60=3660なので、61分の時間差と言うこと

 

 

### numpy.int64型のtime_gmt変数('1396321984'など)に関して ###

 

# このint型の数字はUNIX Timeの秒表記、"1970-01-01 09:00:00 JST"を0とする

# ここ参照

 

d1.ix[0, 'time_gmt']                   # 1396321984

time1 = time.localtime( d1.ix[0, 'time_gmt'] )                  # numpy.int64型を日付表示させるため、time.struct_time型に変換
time1

time.struct_time(tm_year=2014, tm_mon=4, tm_mday=1, tm_hour=12, tm_min=13, tm_sec=4, tm_wday=1, tm_yday=91, tm_isdst=0)

type( time1 )                        # time.struct_time

 

time1.tm_year                      # 2014
time1.tm_mon                      # 4
time1.tm_mday                    # 1
time1.tm_hour                      # 12
time1.tm_min                       # 13


str(time1.tm_year) + '/' + str(time1.tm_mon) + '/' + str(time1.tm_mday) + ' ' + str(time1.tm_hour) + ':' + str(time1.tm_min)            # '2014/4/1 12:13'

 


# int型のpandas.core.series.Seriesを受け取り、str型の日付表示変数をpandas.core.series.Seriesで返す関数

def to_time(gmt):
	l = list()
	for i in gmt:
		t = time.localtime(i)
		s = str(t.tm_year) + '/' + str(t.tm_mon) + '/' + str(t.tm_mday) + ' ' + str(t.tm_hour) + ':' + str(t.tm_min).rjust(2, '0')
		# 'str'.rjust(2, '0')は2桁で右詰めで0で埋める、5ではなく05として表示
		l.append(s)
	return Series(l)

 

s_time = to_time(d1['time_gmt'])
s_time

0    2014/4/1 12:13
1    2014/4/1 11:12
2    2014/4/1 14:05
3    2014/4/1 15:11
4    2014/4/1 16:31
dtype: object

 

以上

 

以下、d1作成コード

data = DataFrame({
'time_gmt':	[1396321984, 1396318328, 1396328719, 1396332667, 1396337510],
'time': ['2014/4/1 12:13', '2014/4/1 11:12', '2014/4/1 14:05', '2014/4/1 15:11', '2014/4/1 16:31'],
'ip': ['11.86.11.66', '10.43.126.16', '58.70.19.72', '119.18.18.38', '130.12.25.122'],
'page': ['A', 'A', 'A', 'A', 'A']
}, columns = ['time_gmt', 'time', 'ip', 'page'])