LoginSignup
6
3

More than 5 years have passed since last update.

Pythonにおけるデータ操作系のライブラリをさっくり紹介する

Last updated at Posted at 2017-12-19

本記事の対象者

  • Python初めて触るよ!
  • pandasでいろいろ遊んでみたいよ!
  • SeriesとDataFrame変換できないよ!
  • groupbyとかcutとかわけわからん!

前提事項

本記事にて記載のコードは、以下をインポートしてる前提で書いてます。

import pandas as pd

Pandasとは

pandasは、Pythonでデータを扱う際に簡単にデータを扱うことができるライブラリだよ!
Series型とDataFrame型があるよ!
Seriesは一次元配列で、DataFrameは多次元配列だよ!
DataFrameに対して何か操作(groupbyとかcutとか)をすると、Series型で返却されることが多いよ!

まずはDataFrame作ろう

# csvから作る場合
csv_DataFrame = pd.read_csv("xxxx.csv")

# excelから作る場合
excel_DataFrame = pd.ExcelFile("xxxx.xlsx")

# 辞書から作る場合
dictionary_DataFrame = pd.DataFrame(
   {'私':['I','my','me','mine'],
    'あなた':['you','your','you','yours'],
    '彼':['he','his','him','his'],
    '彼女':['she','her','her','hers']},
   columns = ['私','あなた','彼','彼女'])

# Seriesから作る場合
age = pd.Series([29, 24, 29, 10, 5, 0],
     index=['Danny', 'Jess', 'Joey', 'D.J.', 'Steph', 'Michelle'])
sex = pd.Series(['m', 'm', 'm', 'f', 'f', 'f'],
     index=['Danny', 'Jess', 'Joey', 'D.J.', 'Steph', 'Michelle'])

series_DataFrame = pd.DataFrame({'age': age, 'sex': sex}, columns=['age', 'sex'])

DataFrameを操作してみよう!

まずは簡単な操作から。

# 以下のDataFrameを作成
dictionary_DataFrame = pd.DataFrame(
   {'私':['I','my','me','mine'],
    'あなた':['you','your','you','yours'],
    '彼':['he','his','him','his'],
    '彼女':['she','her','her','hers']},
   columns = ['私','あなた','彼','彼女'])

# 列の追加
dictionary_DataFrame['私達'] = ['we','our','us','ours']

# 行の追加は一回Seriesを作る
addRow = pd.Series(['myself','yourself','himself','herself','ourselves'], index = dictionary_DataFrame.columns)
dictionary_DataFrame.append(addRow, ignore_index = True)

# 列の抽出
dictionary_DataFrame[['私','彼']]

# 行の抽出(いろいろな方法があるがとりあえずこれだけ)
dictionary_DataFrame[0:3]

次に分割やグループ化。
返り値は全てSeries型

# 以下のDataFrameを作成
cdf = pd.DataFrame(
   {'年代':['20','40','40','30','20','20','50'],
    '支払金額':[100,200,300,400,500,600,700]},
   columns = ['年代','支払金額'])

####実行結果####
###        年代  支払金額
###     0  20   100
###     1  40   200
###     2  40   300
###     3  30   400
###     4  20   500
###     5  20   600
###     6  50   700


# グループ化
# 年代がindexとなり、各年代に対する操作値を出力

# 年代ごとにグルーピングされ、支払金額に対して合計値を出力
cdf.groupby('年代')['支払金額'].sum()
# 年代ごとにグルーピングされ、支払金額に対して平均値を出力
cdf.groupby('年代')['支払金額'].mean()
# 年代ごとにグルーピングされ、支払金額に対して最大値を出力
cdf.groupby('年代')['支払金額'].max()
# 年代ごとにグルーピングされ、支払金額に対して最小値を出力
cdf.groupby('年代')['支払金額'].min()

####実行結果####
#     sumの結果
#     年代
#     20    1200
#     30     400
#     40     500
#     50     700
#     meanの結果
#     年代
#     20    400
#     30    400
#     40    250
#     50    700
#     maxの結果
#     年代
#     20    600
#     30    400
#     40    300
#     50    700
#     minの結果
#     年代
#     20    100
#     30    400
#     40    200
#     50    700

# 分割
# 年代がindexとなり、各年代に対する分割されたグルーピング先を出力

# 指定した範囲でデータを分割
pd.cut(cdf['支払金額'],[0,300,500,700])
# 値の大きさ順にn等分
pd.qcut(cdf['支払金額'],3)

# 
####実行結果####
#     cutの結果
#  0      (0, 300]
#  1      (0, 300]
#  2      (0, 300]
#  3    (300, 500]
#  4    (300, 500]
#  5    (500, 700]
#  6    (500, 700]
#     qcutの結果
#  0    (99.999, 300.0]
#  1    (99.999, 300.0]
#  2    (99.999, 300.0]
#  3     (300.0, 500.0]
#  4     (300.0, 500.0]
#  5     (500.0, 700.0]
#  6     (500.0, 700.0]

分割とグループ化の応用。
分割した項目をkeyとして元のDataFrameに合体し、
再度その分類でグループ化する。

# 以下のDataFrameを作成
cdf = pd.DataFrame(
   {'年代':['20','40','40','30','20','20','50'],
    '支払金額':[100,200,300,400,500,600,700]},
   columns = ['年代','支払金額'])

####実行結果####
###        年代  支払金額
###     0  20   100
###     1  40   200
###     2  40   300
###     3  30   400
###     4  20   500
###     5  20   600
###     6  50   700

# まずグループ化
cdf_sammary_group_series = cdf.groupby('年代')['支払金額'].sum()
####実行結果####
#     sumの結果
#     年代
#     20    1200
#     30     400
#     40     500
#     50     700

# グループ化されたSeriesをDataFrameに変換
cdf_sammary_group_df = pd.DataFrame(cdf_sammary_group_series, columns = ['支払金額'])

# 分割し、groupbyに用いるkeyを作成。また、元のDataFrameに結合
cdf_sammary_group_df['key'] = pd.qcut(cdf_sammary_group_df['支払金額'], 2)

####実行結果####
#         支払金額               key
#     年代                        
#     20  1200   (600.0, 1200.0]
#     30   400  (399.999, 600.0]
#     40   500  (399.999, 600.0]
#     50   700   (600.0, 1200.0]

# 作成したkeyを元に、各分割グループの操作
sum = cdf_sammary_group_df.groupby('key').sum()
max = cdf_sammary_group_df.groupby('key').max()
min = cdf_sammary_group_df.groupby('key').min()

####実行結果####
#     sumの結果
#                  支払金額
#   key                   
#   (399.999, 600.0]   900
#   (600.0, 1200.0]   1900
#     maxの結果
#                  支払金額
#   key                   
#   (399.999, 600.0]   500
#   (600.0, 1200.0]   1200
#     minの結果
#                  支払金額
#   key                   
#   (399.999, 600.0]   400
#   (600.0, 1200.0]    700

最後に今回のおさらい

pandasっていうのは、Pythonでデータ型を扱う上で便利なライブラリだよ!
Seriesっていう一次元配列型と、DataFrameっていう多次元配列型があるよ!
DataFrameを作っておけば、sqlでよくやる操作ができちゃうよ!

勉強が進んだら、もっと掘り下げて書いてみます。

6
3
0

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
6
3