Pandas of the beginner, by the beginner, for the beginner [Python]

#この記事を読む前に
これは自分が忘れないように記したものに少し情報を足してまとめたものです。
読みにくい、分かりにくい場合があれば修正しますのでコメントください。

![finallpandas.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606932/48e40fb2-0e89-7b78-bf6a-4be15f3112dd.png)
引用先：https://www.geeksforgeeks.org/python-pandas-dataframe/

###使用する開発環境
1. anaconda
2. Pycharm
3. Python3.7.7

編集履歴
-2020/04/05
-2020/04/05
--追記　データの削除


#Pandasを始める前に
```Python
#インストール、インポート
pip install pandas
import pandas as pd
```

#では実際にpandasをいじってみます。

##データを取得
pandasを用いて、何かしたい場合、取得必要があります。
csvなどにして準備しておきます。
今回はコロナウイルスの感染者（兵庫県）を使ってみます。

```python
url = "https://web.pref.hyogo.lg.jp/kk03/corona_hasseijyokyo.html"
dfs = pd.read_html(url)
print(dfs[0].head())
#プロンプト上でHTMLの表を表示する

>>>
     0   1   2            3    4     5    6
0   番号  年代  性別          居住地   職業   発表日   備考
1  162  40  男性          神戸市   医師  4月1日  NaN
2  161  20  男性  伊丹健康福祉事務所管内  会社員  4月1日  NaN
3  160  50  女性          宝塚市   無職  4月1日  NaN
4  159  60  男性          宝塚市   医師  4月1日  NaN
```

```Python
#HTML上の表をcsvにする。
#テキストエディタ

import csv

tables = pd.read_html("https://web.pref.hyogo.lg.jp/kk03/corona_hasseijyokyo.html", header=0)
data = tables[0]
data.to_csv("coronaHyogo.csv", index=False)  # 出力
```

##CSVの読み込み
```Python
dfs = pd.read_csv('C:/Users/Desktop/coronaHyogo.csv')
print (dfs)
#CSVをpandasで開く

>>>
     番号  年代  性別             居住地   職業    発表日   備考
0   169  40  男性             尼崎市  会社員   4月2日  NaN
1   168  60  男性             芦屋市  会社員   4月2日  NaN
2   167  50  男性     伊丹健康福祉事務所管内  会社員   4月2日  NaN
3   166  20  女性             伊丹市  NaN   4月2日  NaN
4   165  20  男性             明石市  NaN   4月2日  NaN
..  ...  ..  ..             ...  ...    ...  ...
64  105  70  男性             伊丹市   無職  3月21日  NaN
65  104  80  女性             宝塚市   無職  3月21日   死亡
66  103  60  男性             尼崎市  会社員  3月21日  NaN
67  102  40  女性  帰国者（姫路市保健所発表分）   無職  3月21日  NaN
68  101  20  男性             尼崎市   学生  3月20日  NaN
```
##データの確認
```Python
dfs.shape #dataframeの行数・列数の確認
>>> (69, 7)

dfs.index #indexの確認
>>> RangeIndex(start=0, stop=69, step=1)

dfs.columns #columnの確認
>>> Index(['番号', '年代', '性別', '居住地', '職業', '発表日', '備考'], dtype='object')

dfs.dtypes #dataframeの各列のデータ型を確認
>>>
番号      int64
年代      int64
性別     object
居住地    object
職業     object
発表日    object
備考     object
dtype: object
```

##情報の抜き出し
```Python
df.head(3)
#頭から３行目まで抜き出す。

>>>
    番号  年代  性別          居住地   職業   発表日   備考
0  169  40  男性          尼崎市  会社員  4月2日  NaN
1  168  60  男性          芦屋市  会社員  4月2日  NaN
2  167  50  男性  伊丹健康福祉事務所管内  会社員  4月2日  NaN
```
```Python
dfs.tail()
#後ろから抜き出す。

>>>
     番号  年代  性別             居住地   職業    発表日   備考
64  105  70  男性             伊丹市   無職  3月21日  NaN
65  104  80  女性             宝塚市   無職  3月21日   死亡
66  103  60  男性             尼崎市  会社員  3月21日  NaN
67  102  40  女性  帰国者（姫路市保健所発表分）   無職  3月21日  NaN
68  101  20  男性             尼崎市   学生  3月20日  NaN
```

```Python
dfs[["年代","性別","発表日"]].head()
#列を指定して抜き出す。

>>>
   年代  性別   発表日
0  40  男性  4月2日
1  60  男性  4月2日
2  50  男性  4月2日
3  20  女性  4月2日
4  20  男性  4月2日
```
```Python
row2 = dfs.iloc[3]
print(row2)
#上から３番目のデータのみを表示する。

>>>
番号      166
年代       20
性別       女性
居住地     伊丹市
職業      NaN
発表日    4月2日
備考      NaN
```

##データの整形
```Python
dfs.rename(columns={'性別': 'sex'}, inplace=True)
dfs.head()
#名称の変更（性別をsexに）

>>>
     番号  年代  sex           居住地   職業    発表日   備考
0   169  40  男性             尼崎市  会社員   4月2日  NaN
1   168  60  男性             芦屋市  会社員   4月2日  NaN
2   167  50  男性     伊丹健康福祉事務所管内  会社員   4月2日  NaN
```
```Python
dfs.set_index('年代', inplace=True)
dfs.head()
#

>>>
    番号  性別          居住地   職業   発表日   備考
年代
40  169  男性          尼崎市  会社員  4月2日  NaN
60  168  男性          芦屋市  会社員  4月2日  NaN
50  167  男性  伊丹健康福祉事務所管内  会社員  4月2日  NaN

dfs.index
>>>
Int64Index([40, 60, 50, 20, 20, 70, 50, 40, 20, 50, 60, 60, 60, 10, 30, 60, 10,
            30, 20, 60, 60, 30, 60, 60, 20, 70, 60, 20, 20, 30, 40, 40, 30, 20,
            20, 50, 30, 70, 60, 60, 70, 20, 60, 30, 50, 40, 30, 10, 50, 70, 20,
            80, 20, 80, 40, 70, 30, 80, 60, 70, 40, 70, 90, 80, 70, 80, 60, 40,
            20],
```
```Python
df.sort_values(by="年代", ascending=True).head() # ascending=Trueで昇順
# '年代'列を降順
# df.sort_values(['年代', '発表日'], ascending=False).head() #複数個も可能

>>>
    番号 sex          居住地     職業    発表日   備考
年代
10  122  女性          神戸市     学生  ３月27日  NaN
10  153  女性          尼崎市     学生   4月1日  NaN
10  156  女性          川西市  専門学校生   4月1日  NaN
20  135  女性  伊丹健康福祉事務所管内    会社員  3月30日  NaN
20  117  男性          西宮市     医師  3月24日  NaN
```
```Python
#データの削除
print(df.drop(columns=['番号','居住地']))
```

##データの数を数える
```Python
dfs['年代'].value_counts()
60    15
20    13
70     9
30     9
40     8
50     6
80     5
10     3
90     1
Name: 年代, dtype: int64
```

##統計的指標を求める
```Python
#平均
mean = dfs['年代'].mean()
print(mean) #46.3768115942029

# 合計
sum = dfs['年代'].sum()
print(sum) #3200

# 中央値
median = dfs['年代'].median()
print(median) #50.0

# 最大値
dfsmax = dfs['年代'].max()
print(dfsmax) #90

# 最小値
dfsmin = dfs['年代'].min()
print(dfsmin) #10


# 標準偏差
std = dfs['年代'].std()
print(std) #21.418176344401118

# 分散
var = dfs['年代'].var()
print(var) #458.73827791986366

```