LoginSignup
3

More than 3 years have passed since last update.

機械学習で必要となる配列の扱い方をまとめてみた(主にpandas)

Last updated at Posted at 2019-03-31

Tensorflowなどのフレームワークにデータを投入するのには、データのクレンジングが必要です。
そこで必要となるpandasの使い方についてまとめてみました。
(特に自分が必要だと思った機能だけ)

今後も便利な機能を見つけたら追記していきます。

ヘッダ

先頭に以下のimportを記述します。

import pandas as pd
import matplotlib.pyplot as plt
import tensorflow as tf
from tensorflow import keras
import numpy as np

データ読み込み

CSVから読み込む

読み込みたいファイルのパスを指定することで、csvファイルを簡単に読み込むことができます。

df = pd.read_csv("path/to/target.csv")

配列で定義する

data = [
              ['昭和区滝川町', 30,'マンション','2000',18000000], 
              ['昭和区滝川町', 80,'マンション','2000',34000000], 
              ['昭和区滝川町', 100,'マンション','2000',50000000], 
              ['昭和区滝川町', 60,'マンション','2010',38000000],
              ['昭和区滝川町', 80,'土地','', 24000000], 
              ['昭和区滝川町', 150,'一戸建て','2000',80000000], 
              ['昭和区滝川町', 60,'マンション','2010',38000000],
              ['昭和区山里町', 60,'マンション','2000',18000000], 
              ['昭和区山里町', 80,'一戸建て','2000',24000000], 
              ['昭和区山里町', 100,'マンション','2009',40000000], 
              ['昭和区山里町', 60,'マンション','2010',28000000],
              ['昭和区山里町', 80,'土地','',14000000], 
              ['昭和区山里町', 150,'一戸建て','2018',70000000], 
              ['昭和区山里町', 40,'マンション','2004',15000000] 
       ] 
#定義したデータにヘッダを付けて読み込む
df = pd.DataFrame(data, columns = ['town_name', 'size','type','build_year','price']) 

以降、変数dfに上記の値がデータフレーム形式で読み込まれている前提で例を示します。

列操作

列をコピーする

一列コピー

ulti_columns = df[['price']]

変数priceの値

price
0 28000000
1 34000000
2 50000000
3 38000000
4 24000000

複数行コピー

multi_columns = df[['price','size']]

変数multi_columnsの値はこんな感じになります。

price size
0 28000000 60
1 34000000 80
2 50000000 100
3 38000000 60
4 24000000 80

列を抜き出す

指定した列をdataframeから抜き出します。(抽出元からはここで指定したカラムは削除されます。)

price_column = df.pop('price')

列を消す

指定した列名を持つ列を削除します。

f.__delitem__('price')

列を追加する

同じ値を埋めて列追加

以下の様に記述するとdataframeにnew_column2という列が追加され、すべての値は'new value'となります。

df['new_column2']  = 'new value'

条件に合わせて値を変えて列追加

条件に合わせて値を変えたい場合は以下の様に記述します。

2つの条件を指定する場合

条件が2つだけの時は、以下の様に記述できます。

import numpy as np
df['town_part_of'] = np.where(df['town_name']=='昭和区滝川町', '北部', '南部')

結果

town_name size type build_year price town_part_of
0 昭和区滝川町 60 マンション 2000年 28000000 北部
1 昭和区滝川町 100 一戸建て 2000年 80000000 北部
2 昭和区山里町 60 マンション 2000年 18000000 南部
3 昭和区山里町 80 マンション 2000年 24000000 南部
2つ以上の条件を指定する場合

conditions = [
    (df['size'] <= 50) & (df['type'] == 'マンション'),
    (df['size'] <= 100) & ((df['type'] == 'マンション')|(df['type'] == '一戸建て')),
    (df['size'] > 100)
]
choices = ['一人暮らし用', '4人家族用', '2世帯用']
df['category'] = np.select(conditions, choices, default='不明')
print(df)
town_name size type build_year price town_part_of category
0 昭和区滝川町 30 マンション 2000 18000000 北部 一人暮らし用
1 昭和区滝川町 80 マンション 2000 34000000 北部 4人家族用
2 昭和区滝川町 100 マンション 2000 50000000 北部 4人家族用
3 昭和区滝川町 60 マンション 2010 38000000 北部 4人家族用
4 昭和区滝川町 80 土地 24000000 北部 不明
5 昭和区滝川町 150 一戸建て 2000 80000000 北部 2世帯用
6 昭和区滝川町 60 マンション 2010 38000000 北部 4人家族用
7 昭和区山里町 60 マンション 2000 18000000 南部 4人家族用
8 昭和区山里町 80 一戸建て 2000 24000000 南部 4人家族用

行操作

行を追加する

行を追加する場合は、appendを使って列名と値をセットで指定する。指定しなかった列はNaN(値未設定)となる

df.append({'town_name' : '東区東新町' ,'size': 99, 'type' : 'マンション','build_year':'2011年','price':77000000} , ignore_index=True)

行を消す

0番目と1番目の行を消す

df = df.drop(df.index[[0,1]])

特定のカラムに入っている特定のデータを除外する

typeが土地のデータを除外する

df = df[df.type != '土地']

行を抜き出す

1つのデータと合致するものを抽出

df.loc[df.type == 'マンション']

複数のデータと合致するものを抽出

マンションまたは土地を抽出する

array = ['マンション', '土地']
df.loc[df['type'].isin(array)]

指定行のデータを抽出する

0から3行目までのデータを抽出

df.iloc[0:3]

行と列を指定してデータを抽出する

0行目から5行目のでデータをsizeからpriceにまで絞って抽出

df.loc[ 0:5,'size' : 'price' ]

行をシャッフルする

df.sample(frac=1).reset_index(drop=True)

データを分割する

トレーニングデータとテストデータに分割するときなどに利用する


#データを8:2に分ける
train_dataset = df.sample(frac=0.8,random_state=0)
#train_datasetに含まれているデータを削除する
test_dataset = df.drop(train_dataset.index)

動作するコードは以下にあります
https://colab.research.google.com/drive/1J4nPzvY8wtf1EdKBc5OBW1Umj7gUwNv6

参考ページ:
https://thispointer.com/select-rows-columns-by-name-or-index-in-dataframe-using-loc-iloc-python-pandas/

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3