Pandasの基本操作
Pandas のオブジェクト型
Pandas では次の2つのオブジェクト型が提供されます。
Series:一次元の配列データ。
DataFrame:2次元配列:行と列で構成される表形式データ
Pandas には 3次元データを扱うPanel型というものもありましたが、
Version 0.25.0 で削除されています。
Series型の基本操作
Series型は2つの作成方法があります。
code: python
import pandas as pd
s1 = pd.Series(range(10))
print(s1.head())
print(s2.head())
s3 = pd.Series({'One':1, 'Two':2, 'Three':3})
print(s3.head())
s3 = s3.append(pd.Series({'Four':4}))
print(s3.head())
code: bash
$ python pandas_series_demo.py
0 0
1 1
2 2
3 3
4 4
dtype: int64
One 1
Two 2
Three 3
dtype: int64
One 1
Two 2
Three 3
dtype: int64
One 1
Two 2
Three 3
Four 4
dtype: int64
s1 はRangeオブジェクトをそのままSeries型にしています。このときはインデックスはゼロはじまりの数値が自動的に割り振られます。同様に、list型からSeries型を生成することもできます。
s2 はインデックスを明示的に指定したいときは、index=[] のようにインデックスをリストで与えます。
s3 は辞書型オブジェクトから Series型を生成させています。このとき、インデックスは辞書のキーが割り振られます。
Series型オブジェクトの連結には append()メソッドを使います。
code: IPython
In 2: # %load pandas_series_append.py ...: import pandas as pd
...:
...: s1 = pd.Series(range(5))
...: s3 = pd.Series({'One':1, 'Two':2, 'Three':3})
...:
...: print(s3)
...: s3 = s3.append(pd.Series({'Four':4}))
...: print(s3)
...:
One 1
Two 2
Three 3
dtype: int64
One 1
Two 2
Three 3
Four 4
dtype: int64
In 3: s1.index Out3: RangeIndex(start=0, stop=5, step=1) Series型の要素を抽出
要素の抽出するためには、番号を指定するarray型と、インデックスの文字列を指定する辞書型の2つの方法があります。
code: Python
また、条件を指定することもできます。
code: Python
Three 3
Four 4
dtype: int64
インデックスの有無を確認
キーがSeries型オブジェクトにあるかを確認するためには in を使います。
code: Python
Series型オブジェクトの要素にNULLがあるか調べる
Series型オブジェクトの要素にNULLがあるかを調べるには、isnull() と notnull() を使います。
code: Python
In 17: pd.isnull(s3) Out17: One False
Two False
Three False
Four False
dtype: bool
In 18: pd.notnull(s3) Out18: One True
Two True
Three True
Four True
dtype: bool
Series型オブジェクトの演算
Series型オブジェクトどうしを演算すると、同じインデックスがあればそれを演算した結果をSeries型オブジェクトとして返します。
どちらかに無いインデックスがあるときはNaN がセットされます。
code: Python
In 19: s1 = pd.Series({'Beer':1000, 'Wine':800, 'Sake':750}) ...: s2 = pd.Series({'Beer':1200, 'Wine':2000})
Beer 1000
Wine 800
Sake 750
dtype: int64
Beer 1200
Wine 2000
dtype: int64
Beer 2200.0
Sake NaN
Wine 2800.0
dtype: float64
Beer 200.0
Sake NaN
Wine 1200.0
dtype: float64
Beer 1200000.0
Sake NaN
Wine 1600000.0
dtype: float64
名前の設定
Series型オブジェクトには名前をつけることができます。
code: Python
In 25: s1.name = 'Drink Prices' In 26: s1.index.name = 'Item' In 27: s1 Out27: Item
Beer 1000
Wine 800
Sake 750
Name: Drink Prices, dtype: int64
DataFrame型の基本操作
DataFrame型は行と列から構成される2次元のデータとなります。
https://gyazo.com/3b4705a659d8842dcd5f9e506568d8fb
Series型と同じようにlist型からDataFrameオブジェクトを生成することができます。
code: pandas_dataframe_sample1.py
import pandas as pd
data = [
]
df = pd.DataFrame(data)
code: IPython
In 3: # %load pandas_dataframe_sample1.py ...: import pandas as pd
...: data = [
...: ]
...:
...: df = pd.DataFrame(data)
...:
0 1 2 3 4
0 01 02 03 04 05
1 11 12 13 14 15
2 21 22 23 24 25
list型からDataFrame型オブジェクトを生成すると、行ごとに読んでいくように処理されます。
code: pandas_dataframe_sample2.py
import pandas as pd
history_data = [
]
history_df = pd.DataFrame(history_data)
code: IPython
In 2: # %load pandas_dataframe_sample2.py ...: import pandas as pd
...: history_data = [
...: ]
...:
...: history_df = pd.DataFrame(history_data)
...:
0 1 2 3
0 2015-01-05 2015-01-06 2015-01-07 2015-01-08
1 7565.0 7322.0 7256.0 7500.0
2 7507.0 7300.0 7407.0 7554.0
Series型と同様にdict型データからDataFrame型を生成することができます。
この場合は、列ごとに読んでいくように処理されます。
code: pandas_dataframe_sample3.py
import pandas as pd
history_data = {
}
history_df = pd.DataFrame(history_data)
code: IPython
In 2: # %load pandas_dataframe_sample3.py ...: import pandas as pd
...: history_data = {
...: }
...:
...: history_df = pd.DataFrame(history_data)
...:
Date Open Close
0 2015-01-05 7565.0 7507.0
1 2015-01-06 7322.0 7300.0
2 2015-01-07 7256.0 7407.0
3 2015-01-08 7500.0 7554.0
DataFrameオブジェクトの index と columns にリストで与えるとインデックス名やカラム名を変更することができます。
code: IPython
0 1 2 3 4
0 01 02 03 04 05
1 11 12 13 14 15
2 21 22 23 24 25
A B C D E
000 01 02 03 04 05
001 11 12 13 14 15
002 21 22 23 24 25
DataFrameオブジェクトの追加
DataFrameオブジェクトのappend() を使うことで、行 を追加することができます。
code: Python
Date Open Close
0 2015-01-05 7565.0 7507.0
1 2015-01-06 7322.0 7300.0
2 2015-01-07 7256.0 7407.0
3 2015-01-08 7500.0 7554.0
Date Open Close
0 2015-01-09 7630.0 7609.0
1 2015-01-10 7440.0 7519.0
In 5: df = history_df1.append(history_df2) In 6: df Out6: Date Open Close
0 2015-01-05 7565.0 7507.0
1 2015-01-06 7322.0 7300.0
2 2015-01-07 7256.0 7407.0
3 2015-01-08 7500.0 7554.0
0 2015-01-09 7630.0 7609.0
1 2015-01-10 7440.0 7519.0
Date Open Close
0 2015-01-05 7565.0 7507.0
1 2015-01-06 7322.0 7300.0
2 2015-01-07 7256.0 7407.0
3 2015-01-08 7500.0 7554.0
列を追加するためには、追加するデータを、カラム名を指定してリストで与えます。
該当するカラム名がDataFrameオブジェクトにあれば置き換えられます。
code: IPython
In 2: # %load pandas_dataframe_append2.py ...: import pandas as pd
...: history_data = {
...: }
...: adjClose_data = [
...: '6402.83447265625',
...: '6226.2802734375',
...: '6317.54296875',
...: '6442.92138671875',
...: ]
...:
...: history_df = pd.DataFrame(history_data)
...:
Date Open Close AdjClose
0 2015-01-05 7565.0 7507.0 6402.83447265625
1 2015-01-06 7322.0 7300.0 6226.2802734375
2 2015-01-07 7256.0 7407.0 6317.54296875
3 2015-01-08 7500.0 7554.0 6442.92138671875
In 4: history_df'AdjClose' = adjClose_data In 5: history_df Out5: Date Open Close AdjClose
0 2015-01-05 7565.0 7507.0 6402.83447265625
1 2015-01-06 7322.0 7300.0 6226.2802734375
2 2015-01-07 7256.0 7407.0 6317.54296875
3 2015-01-08 7500.0 7554.0 6442.92138671875
In 8: history_df'AdjClose' = adjClose_data In 9: history_df Out9: Date Open Close AdjClose
0 2015-01-05 7565.0 7507.0 6402
1 2015-01-06 7322.0 7300.0 6226.2802734375
2 2015-01-07 7256.0 7407.0 6317.54296875
3 2015-01-08 7500.0 7554.0 6442.92138671875
DataFrameオブジェクトの index とcolumns を参照するとインデクス名とカラム名を知ることができます。
code: IPython
Date Open Close
0 2015-01-05 7565.0 7507.0
1 2015-01-06 7322.0 7300.0
2 2015-01-07 7256.0 7407.0
3 2015-01-08 7500.0 7554.0
In 4: history_df.index Out4: RangeIndex(start=0, stop=4, step=1) DataFrameのデータ内容を参照する
DataFrameオブジェクト内容を知るためには values を参照します。
このときDataFrameオブジェクトを生成した方法により少し結果が異なります。
code: IPython
In 6: history_data.values Out6: <function dict.values> In 7: history_data.values() Out7: dict_values('2015-01-05', '2015-01-06', '2015-01-07', '2015-01-08'], '7565.0', '7322.0', '7256.0', '7500.0', ['7507.0', '7300.0', '7407.0', '7554.0') dict型オブジェクトからDataFrameオブジェクトを生成したときは、
DataFrame.values は dict.values となり、保持しているデータを参照するためには、
メソッド関数としてアクセスする必要が’あります。
code: IPython
In 9: # %load pandas_dataframe_sample1.py ...: import pandas as pd
...: data = [
...: ]
...:
...: df = pd.DataFrame(data)
...:
0 1 2 3 4
0 01 02 03 04 05
1 11 12 13 14 15
2 21 22 23 24 25
In 11: df.index Out11: RangeIndex(start=0, stop=3, step=1) In 12: df.columns Out12: RangeIndex(start=0, stop=5, step=1) list型オブジェクトからDataFrameオブジェクトを生成したときは、
DataFrame.values でデータの内容を知ることができます。
head() と tail() は指定した行数を表示します。
head(N): 先頭からN行を表示。デフォルトは5
tail(N):最後のN行を表示。デフォルトは5
データ抽出
カラム名を指定するとそのカラムのデータを抽出してDataFrameオブジェクトとして返します。そのとき、指定方法には、ピリオド(.)に続けてカラム名を指定する方法と、辞書型のキーのようにカラム名を指定する2つの方法があります。
code: IPython
Date Open Close
0 2015-01-05 7565.0 7507.0
1 2015-01-06 7322.0 7300.0
2 2015-01-07 7256.0 7407.0
3 2015-01-08 7500.0 7554.0
In 13: d1 = history_df.Open In 14: d2 = history_df'Open' In 15: df1 Out15: 0 7565.0
1 7322.0
2 7256.0
3 7500.0
Name: Open, dtype: object
0 7565.0
1 7322.0
2 7256.0
3 7500.0
Name: Open, dtype: object
複数のカラムを抽出したいときは、リストで渡します。
code: Python
Date Open Close
0 2015-01-05 7565.0 7507.0
1 2015-01-06 7322.0 7300.0
2 2015-01-07 7256.0 7407.0
3 2015-01-08 7500.0 7554.0
In 27: df = history_df'Open', 'Close' In 28: df Out28: Open Close
0 7565.0 7507.0
1 7322.0 7300.0
2 7256.0 7407.0
3 7500.0 7554.0
行を抽出したいときは、iloc()メソッドを呼び出します。
code:Ipython
In 2: # %load pandas_dataframe_sample1.py ...: import pandas as pd
...: data = [
...: ]
...:
...: df = pd.DataFrame(data)
...:
0 11
1 12
2 13
3 14
4 15
Name: 1, dtype: object
In 4: df.iloc12 Out4: '13' shape と ndim
NumPyのndarray型と同じく、PandasのSeries型とDataFrame型オブジェクトでも
shapeアトリビュートを参照することでデータの形状を知ることができます。
また、ndimアトリビュートを参照することでデータの次元数を知ることができます。
Series型のオブジェクトでは1,DataFrame型オブジェクトでは2となります。
describe() で統計情報を表示
Seriesオブジェクト、DataFrameオブジェクトはともに describe() メソッドを持っていて、これを呼び出すとデータの統計情報を表示してくれます。
保持しているデータにより、表示される内容が異なります。
数値データを保持しているときは、平均値(mean)や、最大(max)、最小(min) などを表示します。
code: IPython
0 1
1 2
2 3
3 4
4 5
dtype: int64
count 5.000000
mean 3.000000
std 1.581139
min 1.000000
25% 2.000000
50% 3.000000
75% 4.000000
max 5.000000
dtype: float64
文字列データを保持しているときは、データの総数(count) やユニーク数(uniq)、重複回数(freq)などの統計情報を表示します。
code: Ipython
0 A
1 B
2 C
3 D
4 E
dtype: object
count 5
unique 5
top D
freq 1
dtype: object
時系列データや日時情報を保持しているときは、文字列データの統計情報に加えて、
もっとも古い日時情報(first) ともっとも新しい日時情報(last) を表示します。
code: IPython
...: datetime(2020,1,1),
...: datetime(2020,1,2),
...: datetime(2020,1,3),
...: datetime(2020,1,4)])
0 2020-01-01
1 2020-01-02
2 2020-01-03
3 2020-01-04
In 18: s.describe() Out18: count 4
unique 4
top 2020-01-03 00:00:00
freq 1
first 2020-01-01 00:00:00
last 2020-01-04 00:00:00
dtype: object
DataFrameオブジェクトの場合は、describe() メソッドはデフォルトでは数値データについて統計情報を表示します。
describe(include='all') として呼び出すと、全てのデータについて統計情報を表示します。
code: pandas_dataframe_sample5.py
from datetime import datetime
import pandas as pd
history_data = {
'Date':[
datetime(2015,1,5),
datetime(2015,1,6),
datetime(2015,1,7),
datetime(2015,1,8)
],
}
history_df = pd.DataFrame(history_data)
code: IPython
In 2: # %load pandas_dataframe_sample5.py ...: from datetime import datetime
...: import pandas as pd
...: history_data = {
...: 'Date':[
...: datetime(2015,1,5),
...: datetime(2015,1,6),
...: datetime(2015,1,7),
...: datetime(2015,1,8)
...: ],
...: }
...:
...: history_df = pd.DataFrame(history_data)
...:
Date Open Close
0 2015-01-05 7565.0 7507.0
1 2015-01-06 7322.0 7300.0
2 2015-01-07 7256.0 7407.0
3 2015-01-08 7500.0 7554.0
In 4: history_df.describe() Out4: Open Close
count 4.000000 4.000000
mean 7410.750000 7442.000000
std 145.582451 112.780022
min 7256.000000 7300.000000
25% 7305.500000 7380.250000
50% 7411.000000 7457.000000
75% 7516.250000 7518.750000
max 7565.000000 7554.000000
In 5: history_df.describe(include='all') Out5: Date Open Close
count 4 4.000000 4.000000
unique 4 NaN NaN
top 2015-01-07 00:00:00 NaN NaN
freq 1 NaN NaN
first 2015-01-05 00:00:00 NaN NaN
last 2015-01-08 00:00:00 NaN NaN
mean NaN 7410.750000 7442.000000
std NaN 145.582451 112.780022
min NaN 7256.000000 7300.000000
25% NaN 7305.500000 7380.250000
50% NaN 7411.000000 7457.000000
75% NaN 7516.250000 7518.750000
max NaN 7565.000000 7554.000000
include= にはオブジェクト型のリストを与えることができます。
また、exclude= を指定すると、そのデータ型は対象外となります。
code: IPython
In 22: history_df.Date Out22: 0 2015-01-05
1 2015-01-06
2 2015-01-07
3 2015-01-08
Name: Date, dtype: datetime64ns Date
count 4
unique 4
top 2015-01-07 00:00:00
freq 1
first 2015-01-05 00:00:00
last 2015-01-08 00:00:00
In 24: history_df.Open Out24: 0 7565.0
1 7322.0
2 7256.0
3 7500.0
Name: Open, dtype: float64
Open Close
count 4.000000 4.000000
mean 7410.750000 7442.000000
std 145.582451 112.780022
min 7256.000000 7300.000000
25% 7305.500000 7380.250000
50% 7411.000000 7457.000000
75% 7516.250000 7518.750000
max 7565.000000 7554.000000
Open Close
count 4.000000 4.000000
mean 7410.750000 7442.000000
std 145.582451 112.780022
min 7256.000000 7300.000000
25% 7305.500000 7380.250000
50% 7411.000000 7457.000000
75% 7516.250000 7518.750000
max 7565.000000 7554.000000
DataFrameをソート
code: Ipython
In 2: # %load pandas_dataframe_sort.py ...: import pandas as pd
...:
...: }
...:
...: print (df)
...:
Brand Price Year
0 A 1000 2020
1 B 1200 2017
2 C 800 2018
3 D 1900 2016
カラム名を指定してソード
sort_values() にデータをソートするカラム名を指定します。
ascending=True とすると昇順にソートし、inplace=True でデータを置き換えます。
code: IPytho
In 11: df.sort_values("Brand", inplace=True, ascending=False) In 12: df Out12: Brand Price Year
3 D 1900 2016
2 C 800 2018
1 B 1200 2017
0 A 1000 2020
inplace=False とするとソートされたDataFrameオブジェクトが返されます。
code: IPython
In 14: df.sort_values("Brand", inplace=False, ascending=True) Out14: Brand Price Year
0 A 1000 2020
1 B 1200 2017
2 C 800 2018
3 D 1900 2016
Brand Price Year
3 D 1900 2016
2 C 800 2018
1 B 1200 2017
0 A 1000 2020
インデックスでソード
sort_index() を使うとカラム名やインデックスでソートします。
ascending=True とすると昇順にソートし、inplace=True でデータを置き換えます。
code: IPython
In 24: df.sort_index(axis=0,ascending=False,inplace=True) In 25: df Out25: Brand Price Year
3 D 1900 2016
2 C 800 2018
1 B 1200 2017
0 A 1000 2020
In 26: df.sort_index(axis=0,ascending=True) Out26: Brand Price Year
0 A 1000 2020
1 B 1200 2017
2 C 800 2018
3 D 1900 2016
axis=0 でインデックス、axis=1でカラムでソートします。
code: IPython
In 27: df.sort_index(axis=1,ascending=True) Out27: Brand Price Year
3 D 1900 2016
2 C 800 2018
1 B 1200 2017
0 A 1000 2020
In 28: df.sort_index(axis=1,ascending=False) Out28: Year Price Brand
3 2016 1900 D
2 2018 800 C
1 2017 1200 B
0 2020 1000 A
グルーピング
groupby() にグルーピングを行うカラム名を指定します。
そのグループ化された単位で統計情報などの計算や処理を行うことができます。
code: IPython
In 2: # %load pandas_dataframe_groupby.py ...: import numpy as np
...: import pandas as pd
...:
...: }
...:
...: print (df)
...:
Brand Price Year
0 A 1000 2020
1 B 1200 2017
2 A 1000 2020
3 C 800 2018
4 B 1200 2017
5 D 1900 2016
In 3: df2 = df.groupby("Brand") Brand
A 1000
B 1200
C 800
D 1900
Name: Price, dtype: int64
Brand
A 2000
B 2400
C 800
D 1900
Name: Price, dtype: int64
データフレームに関数を適用する
apply() を使うと、データフレームを関数で処理させることができます。
code: IPython
In 27: df2 = df.groupby("Price") In 28: df2.apply(np.mean) Out28: Price Year
Price
800 800.0 2018.0
1000 1000.0 2020.0
1200 1200.0 2017.0
1900 1900.0 2016.0
In 29: df2.apply(lambda x: np.mean(x)) Out29: Price Year
Price
800 800.0 2018.0
1000 1000.0 2020.0
1200 1200.0 2017.0
1900 1900.0 2016.0
DatetimeIndex
Pandas では時系列データも扱うことができます。
そのときに便利な関数が date_range() です。
code: Ipython
In 2: # %load pandas_index.py ...: import pandas as pd
...:
...: dr_1 = pd.date_range(start='2020/1/1', end='2020/1/08')
...: dr_2 = pd.date_range(start='1/1/2020', end='1/08/2020')
...:
...: print(dr_1)
...: print(dr_2)
...:
DatetimeIndex(['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-04',
'2020-01-05', '2020-01-06', '2020-01-07', '2020-01-08'],
dtype='datetime64ns', freq='D') DatetimeIndex(['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-04',
'2020-01-05', '2020-01-06', '2020-01-07', '2020-01-08'],
dtype='datetime64ns', freq='D') ここで、freq='D' と表示されているものは、周期を表しています。
freqには次のものを指定できます。
table: daterange() で指定できる周期
コード 意味
D 日次 Day、デフォルト
B 営業日ごと(平日), Business Day
C カスタム営業日ごと, Custom Business Day
W 週次, Weekly, W-SUN(Wと同じ),W-MON,W-TUE, W-WED, W-THU, W-FRI, W-SAT
M 月末ごと, Monthly
BM 営業月末ごと, Business Monthly
CBM カスタム営業月末ごと、Custom Business Monthly
MS 月頭ごと Month Start
BMS 営業月頭ごと Business Month Start
CBMS カスタム営業月頭ごと Custom Business Month Start
SM 15日と月末ごと, Semi Monthly
SMS 1日と15日ごと、Semi Month Start
Q 四半期末ごと, Quarter
QS 四半期頭ごと、Quarter Start
BQS 営業四半期頭ごと、Custom Quarter Start
A, Y 年末ごと, Annualy, Yearly
BA, BY 営業年末ごと、Business Annualy, Business Yearly
AS, YS 年頭ごと, Annual Start, Year Start
BAS, BYS 営業年頭ごと, Business Annual Start, Business Year Start
H 時間ごと
BH 営業時間ごと
T, min 分ごと
S, s 秒ごと
L, ms ミリ秒ごと
U, us マイクロ秒ごと
N ナノ秒ごと
WOM-... 毎月第3金曜日であれば WOM-3FRI
周期を指定した例です。
code: Ipython
In 2: # %load pandas_daterange3.py ...: import pandas as pd
...:
...: dr_1 = pd.date_range('2020-01-01', periods=3, freq='3D')
...: dr_2 = pd.date_range('2020-01-01', periods=3, freq='8H')
...: dr_3 = pd.date_range('2020-01-01', periods=3, freq='4H30min')
...:
...: print(f"freq='3D':\n {dr_1}")
...: print(f"freq='8H':\n {dr_2}")
...: print(f"freq='4H30min':\n {dr_3}")
...:
freq='3D':
freq='8H':
DatetimeIndex(['2020-01-01 00:00:00', '2020-01-01 08:00:00',
'2020-01-01 16:00:00'],
dtype='datetime64ns', freq='8H') freq='4H30min':
DatetimeIndex(['2020-01-01 00:00:00', '2020-01-01 04:30:00',
'2020-01-01 09:00:00'],
dtype='datetime64ns', freq='270T') daterangeをSeries型やDataFrame型のindexにセットして使います。
code: Ipython
In 2: # %load pandas_daterange2.py ...: import pandas as pd
...:
...: dates = pd.date_range(start='2020/1/1', periods=5, freq='D')
...: timeseries = pd.Series(range(5), index=dates)
...:
...: print(timeseries)
...:
...:
2020-01-01 0
2020-01-02 1
2020-01-03 2
2020-01-04 3
2020-01-05 4
Freq: D, dtype: int64
bdate_range() 関数は、date_range()と違って、weekmasks とholidays のキーワード引数を受け取ることができます。
code: Ipython
In 2: # %load pandas_bdaterange.py ...: import datetime
...: import pandas as pd
...:
...: start = datetime.datetime(2020, 1, 1)
...: end = datetime.datetime(2020, 3, 30)
...:
...: weekmask = 'Mon Wed Fri'
...: holidays = [datetime.datetime(2020, 2, 11),
...: datetime.datetime(2020, 2, 24),
...: datetime.datetime(2020, 3, 22)]
...:
...: dr_1 = pd.bdate_range(start, end, freq='C', weekmask=weekmask, holidays=ho
...: lidays)
...: dr_2 = pd.bdate_range(start, end, freq='CBMS', weekmask=weekmask)
...:
...: print(dr_1)
...: print(dr_2)
...:
DatetimeIndex(['2020-01-01', '2020-01-03', '2020-01-06', '2020-01-08',
'2020-01-10', '2020-01-13', '2020-01-15', '2020-01-17',
'2020-01-20', '2020-01-22', '2020-01-24', '2020-01-27',
'2020-01-29', '2020-01-31', '2020-02-03', '2020-02-05',
'2020-02-07', '2020-02-10', '2020-02-12', '2020-02-14',
'2020-02-17', '2020-02-19', '2020-02-21', '2020-02-26',
'2020-02-28', '2020-03-02', '2020-03-04', '2020-03-06',
'2020-03-09', '2020-03-11', '2020-03-13', '2020-03-16',
'2020-03-18', '2020-03-20', '2020-03-23', '2020-03-25',
'2020-03-27', '2020-03-30'],
dtype='datetime64ns', freq='C') 参考: