pandas入門--date_range

76273 ワード

pandas date_range
start開始時間
end終了時間
periods時間長
freq時間周波数、デフォルトは「D」、オプションH(our)、W(eek)、B(usiness)、S(emi-)M(onth)、(min)T(es)、S(econd)、A(year)...
In [23]: import datetime

In [24]: datetime.datetime.strptime('2010-01-01', '%Y-%m-%d')  #         
Out[24]: datetime.datetime(2010, 1, 1, 0, 0)

In [25]: #            ,          

In [26]: import dateutil  #       from dateutil import parser

In [27]: dateutil.parser.parse('2001-01-01')
Out[27]: datetime.datetime(2001, 1, 1, 0, 0)

In [28]: #   datatime             

In [29]: dateutil.parser.parse('2001/01/01')
Out[29]: datetime.datetime(2001, 1, 1, 0, 0)

In [30]: dateutil.parser.parse('01/01/2001')
Out[30]: datetime.datetime(2001, 1, 1, 0, 0)

In [31]: dateutil.parser.parse('JAN/01/2001')
Out[31]: datetime.datetime(2001, 1, 1, 0, 0)

In [33]: pd.to_datetime(['2001-01-01', '2010/Feb/02'])
Out[33]: DatetimeIndex(['2001-01-01', '2010-02-02'], dtype='datetime64[ns]', freq=None)

In [34]: #                

In [35]: pd.date_range('2010-01-01','2010-01-15')
Out[35]:
DatetimeIndex(['2010-01-01', '2010-01-02', '2010-01-03', '2010-01-04',
               '2010-01-05', '2010-01-06', '2010-01-07', '2010-01-08',
               '2010-01-09', '2010-01-10', '2010-01-11', '2010-01-12',
               '2010-01-13', '2010-01-14', '2010-01-15'],
              dtype='datetime64[ns]', freq='D')

In [36]: pd.date_range('2010-01-01',periods=20)
Out[36]:
DatetimeIndex(['2010-01-01', '2010-01-02', '2010-01-03', '2010-01-04',
               '2010-01-05', '2010-01-06', '2010-01-07', '2010-01-08',
               '2010-01-09', '2010-01-10', '2010-01-11', '2010-01-12',
               '2010-01-13', '2010-01-14', '2010-01-15', '2010-01-16',
               '2010-01-17', '2010-01-18', '2010-01-19', '2010-01-20'],
              dtype='datetime64[ns]', freq='D')

In [37]: # periods          

In [38]: pd.date_range('2010-01-01',periods=20, freq='W')
Out[38]:
DatetimeIndex(['2010-01-03', '2010-01-10', '2010-01-17', '2010-01-24',
               '2010-01-31', '2010-02-07', '2010-02-14', '2010-02-21',
               '2010-02-28', '2010-03-07', '2010-03-14', '2010-03-21',
               '2010-03-28', '2010-04-04', '2010-04-11', '2010-04-18',
               '2010-04-25', '2010-05-02', '2010-05-09', '2010-05-16'],
              dtype='datetime64[ns]', freq='W-SUN')

In [39]: #     

In [40]: pd.date_range('2010-01-01',periods=20, freq='W-MON')
Out[40]:
DatetimeIndex(['2010-01-04', '2010-01-11', '2010-01-18', '2010-01-25',
               '2010-02-01', '2010-02-08', '2010-02-15', '2010-02-22',
               '2010-03-01', '2010-03-08', '2010-03-15', '2010-03-22',
               '2010-03-29', '2010-04-05', '2010-04-12', '2010-04-19',
               '2010-04-26', '2010-05-03', '2010-05-10', '2010-05-17'],
              dtype='datetime64[ns]', freq='W-MON')

In [41]: #      

In [42]: pd.date_range('2010-01-01',periods=20, freq='B')
Out[42]:
DatetimeIndex(['2010-01-01', '2010-01-04', '2010-01-05', '2010-01-06',
               '2010-01-07', '2010-01-08', '2010-01-11', '2010-01-12',
               '2010-01-13', '2010-01-14', '2010-01-15', '2010-01-18',
               '2010-01-19', '2010-01-20', '2010-01-21', '2010-01-22',
               '2010-01-25', '2010-01-26', '2010-01-27', '2010-01-28'],
              dtype='datetime64[ns]', freq='B')

In [43]: #     / 

In [45]: dt = _

In [46]: dt[0]
Out[46]: Timestamp('2010-01-01 00:00:00', offset='B')

In [47]: dt[0].to_pydatetime()
Out[47]: datetime.datetime(2010, 1, 1, 0, 0)

In [48]: #    python   datatime

In [49]: pd.date_range('2010-01-01',periods=20, freq='1h20min')
Out[49]:
DatetimeIndex(['2010-01-01 00:00:00', '2010-01-01 01:20:00',
               '2010-01-01 02:40:00', '2010-01-01 04:00:00',
               '2010-01-01 05:20:00', '2010-01-01 06:40:00',
               '2010-01-01 08:00:00', '2010-01-01 09:20:00',
               '2010-01-01 10:40:00', '2010-01-01 12:00:00',
               '2010-01-01 13:20:00', '2010-01-01 14:40:00',
               '2010-01-01 16:00:00', '2010-01-01 17:20:00',
               '2010-01-01 18:40:00', '2010-01-01 20:00:00',
               '2010-01-01 21:20:00', '2010-01-01 22:40:00',
               '2010-01-02 00:00:00', '2010-01-02 01:20:00'],
              dtype='datetime64[ns]', freq='80T')

In [50]: #     

pandas常用関数
In [2]: import pandas as pd

In [3]: df = pd.DataFrame({'one':[1,2,3,4], 'two':[4,5,6,7]}, index=['a','b','c'
   ...: ,'d'])

In [4]: df
Out[4]:
   one  two
a    1    4
b    2    5
c    3    6
d    4    7

In [5]: df.mean()
Out[5]:
one    2.5
two    5.5
dtype: float64

In [6]: df.mean(axis=1)
Out[6]:
a    2.5
b    3.5
c    4.5
d    5.5
dtype: float64

In [7]: #       

In [8]: df.sum()
Out[8]:
one    10
two    22
dtype: int64

In [9]: df.sum(axis=1)
Out[9]:
a     5
b     7
c     9
d    11
dtype: int64

In [10]: #     

In [11]: df.sort_values(by='one')
Out[11]:
   one  two
a    1    4
b    2    5
c    3    6
d    4    7

In [12]: df.sort_values(by='one', ascending=False)
Out[12]:
   one  two
d    4    7
c    3    6
b    2    5
a    1    4

In [13]: # ascending    one     

In [16]: #      NaN   ascending    NaN      

In [17]: df.sort_index()
Out[17]:
   one  two
a    1    4
b    2    5
c    3    6
d    4    7

In [18]: #      

In [19]: df.sort_index(ascending=False)
Out[19]:
   one  two
d    4    7
c    3    6
b    2    5
a    1    4

In [20]: #      

In [21]: df.sort_index(ascending=False, axis=1)
Out[21]:
   two  one
a    4    1
b    5    2
c    6    3
d    7    4

In [22]: #      

In [23]:

pandas-時間シーケンス
時系列とは、時間をインデックスとするSeriesまたはDataFrame
DatetimeオブジェクトがインデックスとしてDatetimeIndexオブジェクトに格納される
時系列特殊機能:
「年」または「年月」をスライスとして伝える
入力日範囲をスライスとして使用
関数のサポート:resample()、truncate(),...
In [2]: import pandas as pd
In [2]: import pandas as pd

In [3]: pd.date_range("2010-01-01", '2010-01-20')
Out[3]:
DatetimeIndex(['2010-01-01', '2010-01-02', '2010-01-03', '2010-01-04',
               '2010-01-05', '2010-01-06', '2010-01-07', '2010-01-08',
               '2010-01-09', '2010-01-10', '2010-01-11', '2010-01-12',
               '2010-01-13', '2010-01-14', '2010-01-15', '2010-01-16',
               '2010-01-17', '2010-01-18', '2010-01-19', '2010-01-20'],
              dtype='datetime64[ns]', freq='D')

In [4]: import numpy as np

In [5]: sr = pd.Series(np.arange(20),index=pd.date_range('2017-01-01',periods=20
   ...: ))

In [6]: sr
Out[6]:
2017-01-01     0
2017-01-02     1
2017-01-03     2
2017-01-04     3
2017-01-05     4
2017-01-06     5
2017-01-07     6
2017-01-08     7
2017-01-09     8
2017-01-10     9
2017-01-11    10
2017-01-12    11
2017-01-13    12
2017-01-14    13
2017-01-15    14
2017-01-16    15
2017-01-17    16
2017-01-18    17
2017-01-19    18
2017-01-20    19
Freq: D, dtype: int64

In [7]: sr.index
Out[7]:
DatetimeIndex(['2017-01-01', '2017-01-02', '2017-01-03', '2017-01-04',
               '2017-01-05', '2017-01-06', '2017-01-07', '2017-01-08',
               '2017-01-09', '2017-01-10', '2017-01-11', '2017-01-12',
               '2017-01-13', '2017-01-14', '2017-01-15', '2017-01-16',
               '2017-01-17', '2017-01-18', '2017-01-19', '2017-01-20'],
              dtype='datetime64[ns]', freq='D')

In [8]: #         sr   index   DatetimeIndex   

In [9]: #   sr         

In [10]: sr['2017-01']  #   2017 1    
Out[10]:
2017-01-01     0
2017-01-02     1
2017-01-03     2
2017-01-04     3
2017-01-05     4
2017-01-06     5
2017-01-07     6
2017-01-08     7
2017-01-09     8
2017-01-10     9
2017-01-11    10
2017-01-12    11
2017-01-13    12
2017-01-14    13
2017-01-15    14
2017-01-16    15
2017-01-17    16
2017-01-18    17
2017-01-19    18
2017-01-20    19
Freq: D, dtype: int64

In [11]: sr['2017-01-01':'2017-01-09']
Out[11]:
2017-01-01    0
2017-01-02    1
2017-01-03    2
2017-01-04    3
2017-01-05    4
2017-01-06    5
2017-01-07    6
2017-01-08    7
2017-01-09    8
Freq: D, dtype: int64

In [12]: sr.resample('W').sum()
Out[12]:
2017-01-01     0
2017-01-08    28
2017-01-15    77
2017-01-22    85
Freq: W-SUN, dtype: int64

In [13]: #       

In [14]: sr.resample('M').sum()
Out[14]:
2017-01-31    190
Freq: M, dtype: int64

In [15]: #       

In [16]: sr.resample('M').mean()
Out[16]:
2017-01-31    9.5
Freq: M, dtype: float64

In [17]: sr.truncate(before='2017-01-03') #     after     
Out[17]:
2017-01-03     2
2017-01-04     3
2017-01-05     4
2017-01-06     5
2017-01-07     6
2017-01-08     7
2017-01-09     8
2017-01-10     9
2017-01-11    10
2017-01-12    11
2017-01-13    12
2017-01-14    13
2017-01-15    14
2017-01-16    15
2017-01-17    16
2017-01-18    17
2017-01-19    18
2017-01-20    19
Freq: D, dtype: int64

In [18]:

Pandasファイル読み込み
データファイルの一般的なフォーマット:csv
pandasファイルの読み込み:から.ファイル名、url、ファイル対シーンにデータをロード
​ read_csvデフォルトの区切り記号はカンマ","
​ read_tableデフォルト区切り文字はタブ"t"
read_csv、 read_table関数の主なパラメータ:
sepは区切り記号を指定し、正規表現「s+」のように使用できます.
header=None指定ファイルにカラム名がありません
names列名の指定
​ index_colカラムインデックスの指定
skiprowsスキップいくつかの行[1,2,3]#はスキップ1,2,3行として表される
​ na_values欠落値['None','null']#指定Noneおよびnull文字列がNaNとして解釈される文字列を指定
​ parse_Datesは、bool値またはリスト[]のタイプのカラムが日付に解析されることを指定します.
In [19]: # pd.read_csv("   .csv", index_col='') # index_col         
    ...:     

In [20]: # pd.read_csv("   .csv", index_col=0) # index_col          
    ...:    

In [21]: # pd.read_csv("   .csv", index_col=0, parse_dates=True) # parse_date
    ...: s              

In [22]: #                 

In [23]: # pd.read_csv("   .csv", index_col=0, parse_dates=[' ',‘ ’]) # pa
    ...: rse_dates                    

In [24]:

In [24]: #   csv        ,                 ,    
    ...:    

In [25]: # pd.read_csv('   .csv', header=None) #     header=None     pd
    ...:           0123...           

In [26]: # pd.read_csv('   .csv', header=None, names=['  1', ‘  2’]) #
    ...:     header=None     pd             names      

In [27]: # read_table  read_csv     ,table          

In [28]:

csvファイルへの書き込み:to_csv関数
しゅパラメータ
sepファイル区切り記号の指定
na_repは欠落した値を文字列に変換することを指定し、デフォルトは空の文字列です.
header=Falseはカラム名の行を出力しません
index=False行インデックスの列は出力されません
columns指定出力列、転送リスト
Pandasは他のファイルタイプをサポートします.
json、xml、html、データベース、pickle、excel...