Pandas のよく使うスニペット集

当記事は、[SENSY Advent Calendar 2017](https://qiita.com/advent-calendar/2017/sensy)の7日目の記事です。

前職や今在籍しているSENSY株式会社ではずっとウェブの開発をしていましたが、11月からAIチームのほうに異動しました。毎日ドキドキしています。

当記事は、最近よく使う[Pandas](https://pandas.pydata.org)のスニペット集をまとめていきたいと思います。元々は自分用に参照できるページがほしいなと思っていたので、Pandas自体の説明や細かい説明等は他の記事に譲って、ひたすらスニペットを列挙していきます(いいスニペットを見つけたら追加していきます)。  
また、使用するデータは[Investing.comのBTC/JPY](https://jp.investing.com/currencies/btc-jpy-historical-data)から取得しています。

## インポート

Pandas をインポートするには以下を実行します。  
`pd` としてインポートすることが多いみたいです。

```py
import pandas as pd
```

## DataFrameの作成

[DataFrame](http://pandas.pydata.org/pandas-docs/stable/dsintro.html#dataframe) を作成するには以下のようにします。

```py
df = pd.DataFrame([
    ['2017-10-01', 488197, 489003, 489723, 466627],
    ['2017-10-02', 489139, 488197, 493590, 473007],
    ['2017-10-03', 487987, 489139, 495358, 478978],
    ['2017-10-04', 480618, 487987, 491477, 472229],
    ['2017-10-05', 490673, 480618, 491379, 468064],
    ['2017-10-06', 487560, 490673, 496803, 469707],
    ['2017-10-07', 494927, 487560, 495221, 482922],
    ['2017-10-08', 502668, 494927, 513768, 489213],
    ['2017-10-09', 521692, 502668, 539816, 497525],
    ['2017-10-10', 529605, 521316, 543653, 509183],
    ['2017-10-11', 535745, 529605, 579834, 522659],
    ['2017-10-12', 603830, 535745, 608320, 526535],
    ['2017-10-13', 626833, 603830, 679763, 535514],
    ['2017-10-14', 641376, 626833, 679763, 579459],
    ['2017-10-15', 640736, 641376, 649894, 613526],
    ['2017-10-16', 646682, 640736, 657214, 613343],
    ['2017-10-17', 634682, 646682, 656551, 628475],
    ['2017-10-18', 638945, 634682, 656831, 597587],
    ['2017-10-19', 639563, 638945, 652154, 595464],
    ['2017-10-20', 680935, 639563, 681990, 634207],
    ['2017-10-21', 683720, 680935, 705656, 642202],
    ['2017-10-22', 674718, 683720, 705573, 666582],
    ['2017-10-23', 688504, 674718, 699988, 657828],
    ['2017-10-24', 647263, 688504, 717500, 635624],
    ['2017-10-25', 661909, 647263, 675796, 630626],
    ['2017-10-26', 656882, 661909, 692724, 617153],
    ['2017-10-27', 662773, 672772, 692997, 652498],
    ['2017-10-28', 663574, 662773, 681126, 652498],
    ['2017-10-29', 704915, 663574, 711090, 653967],
    ['2017-10-30', 689863, 704915, 718159, 656695],
    ['2017-10-31', 729017, 689863, 733024, 687718]
], columns=['date', 'open', 'high', 'low', 'close'])

df

# 		date		open	high	low		close
# 0		2017-10-01	488197	489003	489723	466627
# 1		2017-10-02	489139	488197	493590	473007
# 2		2017-10-03	487987	489139	495358	478978
# 3		2017-10-04	480618	487987	491477	472229
# 4		2017-10-05	490673	480618	491379	468064
# 5		2017-10-06	487560	490673	496803	469707
# 6		2017-10-07	494927	487560	495221	482922
# 7		2017-10-08	502668	494927	513768	489213
# 8		2017-10-09	521692	502668	539816	497525
# 9		2017-10-10	529605	521316	543653	509183
# 10	2017-10-11	535745	529605	579834	522659
# 11	2017-10-12	603830	535745	608320	526535
# 12	2017-10-13	626833	603830	679763	535514
# 13	2017-10-14	641376	626833	679763	579459
# 14	2017-10-15	640736	641376	649894	613526
# 15	2017-10-16	646682	640736	657214	613343
# 16	2017-10-17	634682	646682	656551	628475
# 17	2017-10-18	638945	634682	656831	597587
# 18	2017-10-19	639563	638945	652154	595464
# 19	2017-10-20	680935	639563	681990	634207
# 20	2017-10-21	683720	680935	705656	642202
# 21	2017-10-22	674718	683720	705573	666582
# 22	2017-10-23	688504	674718	699988	657828
# 23	2017-10-24	647263	688504	717500	635624
# 24	2017-10-25	661909	647263	675796	630626
# 25	2017-10-26	656882	661909	692724	617153
# 26	2017-10-27	662773	672772	692997	652498
# 27	2017-10-28	663574	662773	681126	652498
# 28	2017-10-29	704915	663574	711090	653967
# 29	2017-10-30	689863	704915	718159	656695
# 30	2017-10-31	729017	689863	733024	687718
```

## DataFrameの情報を取得

### dtypesを表示

```py
df.dtypes

# date     object
# open     int64 
# high     int64 
# low      int64 
# close    int64 
# dtype: object
```

### 列情報を表示

```py
df.columns

# Index(['date', 'open', 'high', 'low', 'close'], dtype='object')
```

### 行と列を表示

```py
df.shape

# (31, 5)
```

### Numpy行列を取得

```py
df.values

# array([['2017-10-01', 488197, 489003, 489723, 466627],
#        ['2017-10-02', 489139, 488197, 493590, 473007],
#        ['2017-10-03', 487987, 489139, 495358, 478978],
#        ['2017-10-04', 480618, 487987, 491477, 472229],
#        ['2017-10-05', 490673, 480618, 491379, 468064],
#        ['2017-10-06', 487560, 490673, 496803, 469707],
#        ['2017-10-07', 494927, 487560, 495221, 482922],
#        ['2017-10-08', 502668, 494927, 513768, 489213],
#        ['2017-10-09', 521692, 502668, 539816, 497525],
#        ['2017-10-10', 529605, 521316, 543653, 509183],
#        ['2017-10-11', 535745, 529605, 579834, 522659],
#        ['2017-10-12', 603830, 535745, 608320, 526535],
#        ['2017-10-13', 626833, 603830, 679763, 535514],
#        ['2017-10-14', 641376, 626833, 679763, 579459],
#        ['2017-10-15', 640736, 641376, 649894, 613526],
#        ['2017-10-16', 646682, 640736, 657214, 613343],
#        ['2017-10-17', 634682, 646682, 656551, 628475],
#        ['2017-10-18', 638945, 634682, 656831, 597587],
#        ['2017-10-19', 639563, 638945, 652154, 595464],
#        ['2017-10-20', 680935, 639563, 681990, 634207],
#        ['2017-10-21', 683720, 680935, 705656, 642202],
#        ['2017-10-22', 674718, 683720, 705573, 666582],
#        ['2017-10-23', 688504, 674718, 699988, 657828],
#        ['2017-10-24', 647263, 688504, 717500, 635624],
#        ['2017-10-25', 661909, 647263, 675796, 630626],
#        ['2017-10-26', 656882, 661909, 692724, 617153],
#        ['2017-10-27', 662773, 672772, 692997, 652498],
#        ['2017-10-28', 663574, 662773, 681126, 652498],
#        ['2017-10-29', 704915, 663574, 711090, 653967],
#        ['2017-10-30', 689863, 704915, 718159, 656695],
#        ['2017-10-31', 729017, 689863, 733024, 687718]], dtype=object)
```

### 要約情報を表示

```py
df.describe()

# 		open			high			low				close
# count	31.000000		31.000000		31.000000		31.000000
# mean	604049.387097	596807.451613	622152.741935	574439.193548
# std	82049.462224	81639.444429	88161.693574	76040.954856
# min	480618.000000	480618.000000	489723.000000	466627.000000
# 25%	512180.000000	498797.500000	526792.000000	493369.000000
# 50%	639563.000000	638945.000000	656831.000000	597587.000000
# 75%	663173.500000	663173.500000	692860.500000	638913.000000
# max	729017.000000	704915.000000	733024.000000	687718.000000
```

### 平均を表示

```py
df.mean()

# open     604049.387097
# high     596807.451613
# low      622152.741935
# close    574439.193548
# dtype: float64
```

## 行の抽出

### スライスを使って部分的に取得する方法

```py
df[2:4]

# 		date	open	high	low		close
# 2	2017-10-03	487987	489139	495358	478978
# 3	2017-10-04	480618	487987	491477	472229
```

### 条件を指定する方法

```py
df[df.date == '2017-10-21']

# 		date		open	high	low		close
# 20	2017-10-21	683720	680935	705656	642202

df[df.open > 700000]

# 		date		open	high	low		close
# 28	2017-10-29	704915	663574	711090	653967
# 30	2017-10-31	729017	689863	733024	687718
```

### 先頭のN行を取得

```py
df.head(3)

# 	date		open	high	low		close
# 0	2017-10-01	488197	489003	489723	466627
# 1	2017-10-02	489139	488197	493590	473007
# 2	2017-10-03	487987	489139	495358	478978
```

### 最後からN行を取得

```py
df.tail(3)

# 		date		open	high	low		close
# 28	2017-10-29	704915	663574	711090	653967
# 29	2017-10-30	689863	704915	718159	656695
# 30	2017-10-31	729017	689863	733024	687718
```

### イテレーションを回して1行ずつ取得

```py
for index, row in df.iterrows():
    print(row)

# date     2017-10-01
# open     488197    
# high     489003    
# low      489723    
# close    466627    
# Name: 0, dtype: object
# date     2017-10-02
# open     489139    
# high     488197    
# low      493590    
# close    473007    
# Name: 1, dtype: object

...

# date     2017-10-31
# open     729017    
# high     689863    
# low      733024    
# close    687718    
# Name: 30, dtype: object
```

## 列の抽出

```py
df['date']

# 0     2017-10-01
# 1     2017-10-02
# 2     2017-10-03
# 3     2017-10-04
# 4     2017-10-05
# 5     2017-10-06
# 6     2017-10-07
# 7     2017-10-08
# 8     2017-10-09
# 9     2017-10-10
# 10    2017-10-11
# 11    2017-10-12
# 12    2017-10-13
# 13    2017-10-14
# 14    2017-10-15
# 15    2017-10-16
# 16    2017-10-17
# 17    2017-10-18
# 18    2017-10-19
# 19    2017-10-20
# 20    2017-10-21
# 21    2017-10-22
# 22    2017-10-23
# 23    2017-10-24
# 24    2017-10-25
# 25    2017-10-26
# 26    2017-10-27
# 27    2017-10-28
# 28    2017-10-29
# 29    2017-10-30
# 30    2017-10-31
# Name: date, dtype: object

df.open

# 0     488197
# 1     489139
# 2     487987
# 3     480618
# 4     490673
# 5     487560
# 6     494927
# 7     502668
# 8     521692
# 9     529605
# 10    535745
# 11    603830
# 12    626833
# 13    641376
# 14    640736
# 15    646682
# 16    634682
# 17    638945
# 18    639563
# 19    680935
# 20    683720
# 21    674718
# 22    688504
# 23    647263
# 24    661909
# 25    656882
# 26    662773
# 27    663574
# 28    704915
# 29    689863
# 30    729017
# Name: open, dtype: int64
```

### 列名の変更

```py
df.rename(columns = {
    'open': 'opening',
    'close': 'closing',
})

# 		date		opening	high	low		closing
# 0		2017-10-01	488197	489003	489723	466627
# 1		2017-10-02	489139	488197	493590	473007
# 2		2017-10-03	487987	489139	495358	478978
# 3		2017-10-04	480618	487987	491477	472229
# 4		2017-10-05	490673	480618	491379	468064
# 5		2017-10-06	487560	490673	496803	469707
# 6		2017-10-07	494927	487560	495221	482922
# 7		2017-10-08	502668	494927	513768	489213
# 8		2017-10-09	521692	502668	539816	497525
# 9		2017-10-10	529605	521316	543653	509183
# 10	2017-10-11	535745	529605	579834	522659
# 11	2017-10-12	603830	535745	608320	526535
# 12	2017-10-13	626833	603830	679763	535514
# 13	2017-10-14	641376	626833	679763	579459
# 14	2017-10-15	640736	641376	649894	613526
# 15	2017-10-16	646682	640736	657214	613343
# 16	2017-10-17	634682	646682	656551	628475
# 17	2017-10-18	638945	634682	656831	597587
# 18	2017-10-19	639563	638945	652154	595464
# 19	2017-10-20	680935	639563	681990	634207
# 20	2017-10-21	683720	680935	705656	642202
# 21	2017-10-22	674718	683720	705573	666582
# 22	2017-10-23	688504	674718	699988	657828
# 23	2017-10-24	647263	688504	717500	635624
# 24	2017-10-25	661909	647263	675796	630626
# 25	2017-10-26	656882	661909	692724	617153
# 26	2017-10-27	662773	672772	692997	652498
# 27	2017-10-28	663574	662773	681126	652498
# 28	2017-10-29	704915	663574	711090	653967
# 29	2017-10-30	689863	704915	718159	656695
# 30	2017-10-31	729017	689863	733024	687718
```

一括処理する場合の例:

```py
df.columns = map(str.upper, df.columns)

df

#		DATE		OPEN	HIGH	LOW		CLOSE
# 0		2017-10-01	488197	489003	489723	466627
# 1		2017-10-02	489139	488197	493590	473007
# 2		2017-10-03	487987	489139	495358	478978
# 3		2017-10-04	480618	487987	491477	472229
# 4		2017-10-05	490673	480618	491379	468064
# 5		2017-10-06	487560	490673	496803	469707
# 6		2017-10-07	494927	487560	495221	482922
# 7		2017-10-08	502668	494927	513768	489213
# 8		2017-10-09	521692	502668	539816	497525
# 9		2017-10-10	529605	521316	543653	509183
# 10	2017-10-11	535745	529605	579834	522659
# 11	2017-10-12	603830	535745	608320	526535
# 12	2017-10-13	626833	603830	679763	535514
# 13	2017-10-14	641376	626833	679763	579459
# 14	2017-10-15	640736	641376	649894	613526
# 15	2017-10-16	646682	640736	657214	613343
# 16	2017-10-17	634682	646682	656551	628475
# 17	2017-10-18	638945	634682	656831	597587
# 18	2017-10-19	639563	638945	652154	595464
# 19	2017-10-20	680935	639563	681990	634207
# 20	2017-10-21	683720	680935	705656	642202
# 21	2017-10-22	674718	683720	705573	666582
# 22	2017-10-23	688504	674718	699988	657828
# 23	2017-10-24	647263	688504	717500	635624
# 24	2017-10-25	661909	647263	675796	630626
# 25	2017-10-26	656882	661909	692724	617153
# 26	2017-10-27	662773	672772	692997	652498
# 27	2017-10-28	663574	662773	681126	652498
# 28	2017-10-29	704915	663574	711090	653967
# 29	2017-10-30	689863	704915	718159	656695
# 30	2017-10-31	729017	689863	733024	687718
```

### 列の削除

```py
df.drop(['date'], axis=1)

# 		open	high	low		close
# 0		488197	489003	489723	466627
# 1		489139	488197	493590	473007
# 2		487987	489139	495358	478978
# 3		480618	487987	491477	472229
# 4		490673	480618	491379	468064
# 5		487560	490673	496803	469707
# 6		494927	487560	495221	482922
# 7		502668	494927	513768	489213
# 8		521692	502668	539816	497525
# 9		529605	521316	543653	509183
# 10	535745	529605	579834	522659
# 11	603830	535745	608320	526535
# 12	626833	603830	679763	535514
# 13	641376	626833	679763	579459
# 14	640736	641376	649894	613526
# 15	646682	640736	657214	613343
# 16	634682	646682	656551	628475
# 17	638945	634682	656831	597587
# 18	639563	638945	652154	595464
# 19	680935	639563	681990	634207
# 20	683720	680935	705656	642202
# 21	674718	683720	705573	666582
# 22	688504	674718	699988	657828
# 23	647263	688504	717500	635624
# 24	661909	647263	675796	630626
# 25	656882	661909	692724	617153
# 26	662773	672772	692997	652498
# 27	663574	662773	681126	652498
# 28	704915	663574	711090	653967
# 29	689863	704915	718159	656695
# 30	729017	689863	733024	687718
```

### 列をDatetime型に変換

```py
df.date

# 0     2017-10-01
# 1     2017-10-02
# 2     2017-10-03
# 3     2017-10-04
# 4     2017-10-05
# 5     2017-10-06
# 6     2017-10-07
# 7     2017-10-08
# 8     2017-10-09
# 9     2017-10-10
# 10    2017-10-11
# 11    2017-10-12
# 12    2017-10-13
# 13    2017-10-14
# 14    2017-10-15
# 15    2017-10-16
# 16    2017-10-17
# 17    2017-10-18
# 18    2017-10-19
# 19    2017-10-20
# 20    2017-10-21
# 21    2017-10-22
# 22    2017-10-23
# 23    2017-10-24
# 24    2017-10-25
# 25    2017-10-26
# 26    2017-10-27
# 27    2017-10-28
# 28    2017-10-29
# 29    2017-10-30
# 30    2017-10-31
# Name: date, dtype: object

df['date'] = pd.to_datetime(df['date'])

df.date

# 0    2017-10-01
# 1    2017-10-02
# 2    2017-10-03
# 3    2017-10-04
# 4    2017-10-05
# 5    2017-10-06
# 6    2017-10-07
# 7    2017-10-08
# 8    2017-10-09
# 9    2017-10-10
# 10   2017-10-11
# 11   2017-10-12
# 12   2017-10-13
# 13   2017-10-14
# 14   2017-10-15
# 15   2017-10-16
# 16   2017-10-17
# 17   2017-10-18
# 18   2017-10-19
# 19   2017-10-20
# 20   2017-10-21
# 21   2017-10-22
# 22   2017-10-23
# 23   2017-10-24
# 24   2017-10-25
# 25   2017-10-26
# 26   2017-10-27
# 27   2017-10-28
# 28   2017-10-29
# 29   2017-10-30
# 30   2017-10-31
# Name: date, dtype: datetime64[ns]
```

## データ参照

```py
df[df.date == '2017-10-20'][['date', 'open']]

# 		date		open
# 19	2017-10-20	680935
```

```py
df.loc[5:8, ['date', 'open', 'close']]

# 	date		open	close
# 5	2017-10-06	487560	469707
# 6	2017-10-07	494927	482922
# 7	2017-10-08	502668	489213
# 8	2017-10-09	521692	497525
```

```py
df.iloc[5:8, 0:3]

# 	date		open	high
# 5	2017-10-06	487560	490673
# 6	2017-10-07	494927	487560
# 7	2017-10-08	502668	494927
```

```py
df.query('open > 70000 & close > 680000')

# 		date		open	high	low		close
# 30	2017-10-31	729017	689863	733024	687718
```

## ソート

```py
df.sort_values(by='open', ascending=True).head(5)

# 	date		open	high	low		close
# 3	2017-10-04	480618	487987	491477	472229
# 5	2017-10-06	487560	490673	496803	469707
# 2	2017-10-03	487987	489139	495358	478978
# 0	2017-10-01	488197	489003	489723	466627
# 1	2017-10-02	489139	488197	493590	473007

df.sort_values(by='open', ascending=False).head(5)

# 		date		open	high	low		close
# 30	2017-10-31	729017	689863	733024	687718
# 28	2017-10-29	704915	663574	711090	653967
# 29	2017-10-30	689863	704915	718159	656695
# 22	2017-10-23	688504	674718	699988	657828
# 20	2017-10-21	683720	680935	705656	642202
```

## DataFrameのインデックス

### インデックスを取得

```py
df.index

# RangeIndex(start=0, stop=31, step=1)
```

### インデックスのリセット

```py
df = df.sort_values(by='high', ascending=False)

df.head(5)

# 		date		open	high	low		close
# 29	2017-10-30	689863	704915	718159	656695
# 30	2017-10-31	729017	689863	733024	687718
# 23	2017-10-24	647263	688504	717500	635624
# 21	2017-10-22	674718	683720	705573	666582
# 20	2017-10-21	683720	680935	705656	642202

df = df.sort_values(by='high', ascending=False)

new_df = df.reset_index(drop=True)

new_df.head(5)

# 	date		open	high	low		close
# 0	2017-10-30	689863	704915	718159	656695
# 1	2017-10-31	729017	689863	733024	687718
# 2	2017-10-24	647263	688504	717500	635624
# 3	2017-10-22	674718	683720	705573	666582
# 4	2017-10-21	683720	680935	705656	642202
```

## ピボットテーブル

インデックスを`date`列、カラムを`low`列、値を`high`列として、欠損値は0.0で埋めて、ピボットテーブルを作成

```py
pd.pivot_table(df, values='high', index='date', columns='low', fill_value=0.0)

# low	489723	491379	491477	493590	495221	495358	496803	513768	539816	543653	...	681990	692724	692997	699988	705573	705656	711090	717500	718159	733024
# date																					
# 2017-10-01	489003	0	0	0	0	0	0	0	0	0	...	0	0	0	0	0	0	0	0	0	0
# 2017-10-02	0	0	0	488197	0	0	0	0	0	0	...	0	0	0	0	0	0	0	0	0	0
# 2017-10-03	0	0	0	0	0	489139	0	0	0	0	...	0	0	0	0	0	0	0	0	0	0
# 2017-10-04	0	0	487987	0	0	0	0	0	0	0	...	0	0	0	0	0	0	0	0	0	0
# 2017-10-05	0	480618	0	0	0	0	0	0	0	0	...	0	0	0	0	0	0	0	0	0	0
# 2017-10-06	0	0	0	0	0	0	490673	0	0	0	...	0	0	0	0	0	0	0	0	0	0
# 2017-10-07	0	0	0	0	487560	0	0	0	0	0	...	0	0	0	0	0	0	0	0	0	0
# 2017-10-08	0	0	0	0	0	0	0	494927	0	0	...	0	0	0	0	0	0	0	0	0	0
# 2017-10-09	0	0	0	0	0	0	0	0	502668	0	...	0	0	0	0	0	0	0	0	0	0
# 2017-10-10	0	0	0	0	0	0	0	0	0	521316	...	0	0	0	0	0	0	0	0	0	0
# 2017-10-11	0	0	0	0	0	0	0	0	0	0	...	0	0	0	0	0	0	0	0	0	0
# 2017-10-12	0	0	0	0	0	0	0	0	0	0	...	0	0	0	0	0	0	0	0	0	0
# 2017-10-13	0	0	0	0	0	0	0	0	0	0	...	0	0	0	0	0	0	0	0	0	0
# 2017-10-14	0	0	0	0	0	0	0	0	0	0	...	0	0	0	0	0	0	0	0	0	0
# 2017-10-15	0	0	0	0	0	0	0	0	0	0	...	0	0	0	0	0	0	0	0	0	0
# 2017-10-16	0	0	0	0	0	0	0	0	0	0	...	0	0	0	0	0	0	0	0	0	0
# 2017-10-17	0	0	0	0	0	0	0	0	0	0	...	0	0	0	0	0	0	0	0	0	0
# 2017-10-18	0	0	0	0	0	0	0	0	0	0	...	0	0	0	0	0	0	0	0	0	0
# 2017-10-19	0	0	0	0	0	0	0	0	0	0	...	0	0	0	0	0	0	0	0	0	0
# 2017-10-20	0	0	0	0	0	0	0	0	0	0	...	639563	0	0	0	0	0	0	0	0	0
# 2017-10-21	0	0	0	0	0	0	0	0	0	0	...	0	0	0	0	0	680935	0	0	0	0
# 2017-10-22	0	0	0	0	0	0	0	0	0	0	...	0	0	0	0	683720	0	0	0	0	0
# 2017-10-23	0	0	0	0	0	0	0	0	0	0	...	0	0	0	674718	0	0	0	0	0	0
# 2017-10-24	0	0	0	0	0	0	0	0	0	0	...	0	0	0	0	0	0	0	688504	0	0
# 2017-10-25	0	0	0	0	0	0	0	0	0	0	...	0	0	0	0	0	0	0	0	0	0
# 2017-10-26	0	0	0	0	0	0	0	0	0	0	...	0	661909	0	0	0	0	0	0	0	0
# 2017-10-27	0	0	0	0	0	0	0	0	0	0	...	0	0	672772	0	0	0	0	0	0	0
# 2017-10-28	0	0	0	0	0	0	0	0	0	0	...	0	0	0	0	0	0	0	0	0	0
# 2017-10-29	0	0	0	0	0	0	0	0	0	0	...	0	0	0	0	0	0	663574	0	0	0
# 2017-10-30	0	0	0	0	0	0	0	0	0	0	...	0	0	0	0	0	0	0	0	704915	0
# 2017-10-31	0	0	0	0	0	0	0	0	0	0	...	0	0	0	0	0	0	0	0	0	689863
```

## 連結

### 行方向連結

```py
new_df = pd.DataFrame([
    ['2017-11-01', 729017, 787179, 693575, 775693],
    ['2017-11-02', 775693, 869998, 707769, 805927],
    ['2017-11-03', 781055, 904306, 777738, 828976],
    ['2017-11-04', 828976, 889949, 789065, 861002],
    ['2017-11-05', 861002, 865634, 818642, 844983],
    ['2017-11-06', 844983, 865141, 791010, 797783],
    ['2017-11-07', 797783, 856412, 787884, 827687],
    ['2017-11-08', 827687, 890823, 807321, 866073],
    ['2017-11-09', 866073, 890715, 806285, 806632],
    ['2017-11-10', 806632, 866885, 751096, 765882]
], columns=['date', 'open', 'high', 'low', 'close'])

pd.concat([df, new_df])

# 		date		open	high	low		close
# 0		2017-10-01	488197	489003	489723	466627
# 1		2017-10-02	489139	488197	493590	473007
# 2		2017-10-03	487987	489139	495358	478978
# 3		2017-10-04	480618	487987	491477	472229
# 4		2017-10-05	490673	480618	491379	468064
# 5		2017-10-06	487560	490673	496803	469707
# 6		2017-10-07	494927	487560	495221	482922
# 7		2017-10-08	502668	494927	513768	489213
# 8		2017-10-09	521692	502668	539816	497525
# 9		2017-10-10	529605	521316	543653	509183
# 10	2017-10-11	535745	529605	579834	522659
# 11	2017-10-12	603830	535745	608320	526535
# 12	2017-10-13	626833	603830	679763	535514
# 13	2017-10-14	641376	626833	679763	579459
# 14	2017-10-15	640736	641376	649894	613526
# 15	2017-10-16	646682	640736	657214	613343
# 16	2017-10-17	634682	646682	656551	628475
# 17	2017-10-18	638945	634682	656831	597587
# 18	2017-10-19	639563	638945	652154	595464
# 19	2017-10-20	680935	639563	681990	634207
# 20	2017-10-21	683720	680935	705656	642202
# 21	2017-10-22	674718	683720	705573	666582
# 22	2017-10-23	688504	674718	699988	657828
# 23	2017-10-24	647263	688504	717500	635624
# 24	2017-10-25	661909	647263	675796	630626
# 25	2017-10-26	656882	661909	692724	617153
# 26	2017-10-27	662773	672772	692997	652498
# 27	2017-10-28	663574	662773	681126	652498
# 28	2017-10-29	704915	663574	711090	653967
# 29	2017-10-30	689863	704915	718159	656695
# 30	2017-10-31	729017	689863	733024	687718
# 0		2017-11-01	729017	787179	693575	775693
# 1		2017-11-02	775693	869998	707769	805927
# 2		2017-11-03	781055	904306	777738	828976
# 3		2017-11-04	828976	889949	789065	861002
# 4		2017-11-05	861002	865634	818642	844983
# 5		2017-11-06	844983	865141	791010	797783
# 6		2017-11-07	797783	856412	787884	827687
# 7		2017-11-08	827687	890823	807321	866073
# 8		2017-11-09	866073	890715	806285	806632
# 9		2017-11-10	806632	866885	751096	765882
```

### 列方向連結

```py
new_df = pd.DataFrame([
    [-0.16], [0.19], [-0.24], [-1.51], [2.09], [-0.63],
    [1.51], [1.56], [3.78], [1.52], [1.16], [12.71],
    [3.81], [2.32], [-0.1], [0.93], [-1.86], [0.67],
    [0.1], [6.47], [0.41], [-1.32], [2.04], [-5.99],
    [2.26], [-0.76], [0.9], [0.12], [6.23], [-2.14],
    [5.68]
], columns=['ratio'])

df.join(new_df, how='inner')

# 		date		open	high	low		close	ratio
# 0		2017-10-01	488197	489003	489723	466627	-0.16
# 1		2017-10-02	489139	488197	493590	473007	0.19
# 2		2017-10-03	487987	489139	495358	478978	-0.24
# 3		2017-10-04	480618	487987	491477	472229	-1.51
# 4		2017-10-05	490673	480618	491379	468064	2.09
# 5		2017-10-06	487560	490673	496803	469707	-0.63
# 6		2017-10-07	494927	487560	495221	482922	1.51
# 7		2017-10-08	502668	494927	513768	489213	1.56
# 8		2017-10-09	521692	502668	539816	497525	3.78
# 9		2017-10-10	529605	521316	543653	509183	1.52
# 10	2017-10-11	535745	529605	579834	522659	1.16
# 11	2017-10-12	603830	535745	608320	526535	12.71
# 12	2017-10-13	626833	603830	679763	535514	3.81
# 13	2017-10-14	641376	626833	679763	579459	2.32
# 14	2017-10-15	640736	641376	649894	613526	-0.10
# 15	2017-10-16	646682	640736	657214	613343	0.93
# 16	2017-10-17	634682	646682	656551	628475	-1.86
# 17	2017-10-18	638945	634682	656831	597587	0.67
# 18	2017-10-19	639563	638945	652154	595464	0.10
# 19	2017-10-20	680935	639563	681990	634207	6.47
# 20	2017-10-21	683720	680935	705656	642202	0.41
# 21	2017-10-22	674718	683720	705573	666582	-1.32
# 22	2017-10-23	688504	674718	699988	657828	2.04
# 23	2017-10-24	647263	688504	717500	635624	-5.99
# 24	2017-10-25	661909	647263	675796	630626	2.26
# 25	2017-10-26	656882	661909	692724	617153	-0.76
# 26	2017-10-27	662773	672772	692997	652498	0.90
# 27	2017-10-28	663574	662773	681126	652498	0.12
# 28	2017-10-29	704915	663574	711090	653967	6.23
# 29	2017-10-30	689863	704915	718159	656695	-2.14
# 30	2017-10-31	729017	689863	733024	687718	5.68
```

## 型を指定して抽出

```py
df.open.astype(float)

# 0    32631.0
# 1    32804.0
# 2    33104.0
# Name: open, dtype: float64
```

## 行列の反転

```py
df.T

# 		0		1		2		3		4		5		6		7		8		9		...		21		22		23		24		25		26	27		28		29		30
# date	2017-10-01 00:00:00	2017-10-02 00:00:00	2017-10-03 00:00:00	2017-10-04 00:00:00	2017-10-05 00:00:00	2017-10-06 00:00:00	2017-10-07 00:00:00	2017-10-08 00:00:00	2017-10-09 00:00:00	2017-10-10 00:00:00	...	2017-10-22 00:00:00	2017-10-23 00:00:00	2017-10-24 00:00:00	2017-10-25 00:00:00	2017-10-26 00:00:00	2017-10-27 00:00:00	2017-10-28 00:00:00	2017-10-29 00:00:00	2017-10-30 00:00:00	2017-10-31 00:00:00
# open	488197	489139	487987	480618	490673	487560	494927	502668	521692	529605	...	674718	688504	647263	661909	656882	662773	663574	704915	689863	729017
# high	489003	488197	489139	487987	480618	490673	487560	494927	502668	521316	...	683720	674718	688504	647263	661909	672772	662773	663574	704915	689863
# low	489723	493590	495358	491477	491379	496803	495221	513768	539816	543653	...	705573	699988	717500	675796	692724	692997	681126	711090	718159	733024
# close	466627	473007	478978	472229	468064	469707	482922	489213	497525	509183	...	666582	657828	635624	630626	617153	652498	652498	653967	656695	687718
```