フリーランス 技術調査ブログ

フリーランス/エンジニア Ruby Python Nodejs Vuejs React Dockerなどの調査技術調査の備忘録

pandasの20本ノックをやってみた。

はじめに

  • 下記の動画の20本ノックを試してみた。 www.youtube.com

20本ノックを試した結果

import pandas as pd

# 1本目 データの読み込み
df = pd.read_csv("./weather.csv");

# 2本目 データの中身の確認(先頭3行、末尾10行を表示)
df.head(3)
df.tail(10)

# 3本目 不要な列、特定の行の削除
df.columns

## 下記の方法は必要な列だけを指定してデータを抽出する方法
df = df[['年月日', '平均気温(℃)', '最高気温(℃)','最低気温(℃)','降水量の合計(mm)','最深積雪(cm)','平均雲量(10分比)','平均蒸気圧(hPa)','平均風速(m/s)','日照時間(時間)']][1:]
df
# 不要な列の削除は下記のようにdropでもできる。 axis=1は行、axis=0は列
#df = df.drop(["日照時間(時間).1","日照時間(時間).2"],axis=1)
#df

# 列の削除
#df = df.drop(["年月日","最高気温(℃)"],axis=1)
#df
# 行の削除
#df = df.drop(3,axis=0)
#df

# 4本目 データの型、サイズ、列名、行名の確認
# データ型の確認
df.dtypes
# データのサイズの確認
df.shape
# 列名の確認
df.index
# 列名確認
df.columns

# 5本目 任意の要素を取得する
# 自分の答え
#df.loc[5:10]
#df.loc[3:6][['最高気温(℃)','最低気温(℃)','降水量の合計(mm)','最深積雪(cm)']]

# ilocを利用する場合
# indexは0スタートとなるため、5行目のデータを取得する場合、4を指定する、カラム名もindexで指定する
df.iloc[4:10, 2:6]

# locを利用する場合
# 5行目から10行目を取得して、カラム名が「最高気温(℃)」~「最深積雪(cm)」を指定する 
df.loc[5:10, '最高気温(℃)':'最深積雪(cm)']

# 6本目 条件抽出
# nationalityがAmericaである
# ageが20以上30未満である
# 自分の答え
df_peple = pd.read_csv("./people.csv")
df_peple.query('20 <= age < 30 and nationality == "America"')

## 別の書き方
df_peple[df_peple['nationality'] == 'America']
df_peple[df_peple['nationality'].isin(['America'])]
df_peple[(df_peple['age'] >= 20) & (df_peple['age'] < 30)]
df_peple.query('age >= 20 & age < 30')

# 7本目 ユニークな値を抽出
## pandas.core.frame.DataFrameの場合、uniqueは使えない。
## pandas.core.series.Seriesの場合、uniqueが使える
df_peple['nationality'].unique()

# 8本目 重複除去
df_peple.drop_duplicates(subset='nationality')

# 9本目 カラム名変更

## 一括でカラム名を変更する場合
df.columns = ['年月日', '平均気温', '最高気温', '最低気温', '降水量の合計', '最深積雪',
              '平均雲量', '平均蒸気圧', '平均風速', '日照時間']

## 特定のカラム名を変更する場合
df.rename(columns={'平均気温' : '平均'})

# 10本目 並び替え
## 昇順
df.sort_values('最高気温')

## 降順にする場合、ascending=Falseを指定する
df.sort_values('最高気温', ascending=False)

## 11本目 ダミー変数への処理

## 文字列の値を数値に変換
pd.get_dummies(df_peple['nationality'])

## データフレームに結合したい場合
pd.get_dummies(df_peple, columns=['nationality'])

## 12本目 欠損値の確認
df.isnull()
df.isnull().sum()

## 13本目 欠損値の補完
df = df.fillna(0)
## https://qiita.com/0NE_shoT_/items/8db6d909e8b48adcb203
df