0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

分析で利用するpandasのDataFrame(データの操作編)

Posted at

前記事からの続きです。
前の記事はこちら

利用するデータは説明のため以下のデータを利用します。
今回説明のため、適当に、日付を入れています。
また、わかりやすいように欠損値(pd.NA)を入れています。

import pandas as pd

df = pd.DataFrame({'DATE':['2023/3/24','2024/3/24','2023/3/26','2024/3/26','2023/3/28','2024/3/30','2024/3/30'],
                    'GOOG':[158.56,157.21,167.31,168.42,167.19,pd.NA,168.83]
                   })

行と列の値の関係が見やすいように、df.head(7)の実行結果を表示させます。

実行結果
        DATE    GOOG
0  2023/3/24  158.56
1  2024/3/24  157.21
2  2023/3/26  167.31
3  2024/3/26  168.42
4  2023/3/28  167.19
5  2024/3/30    <NA>
6  2024/3/30  168.83

実行結果

データの操作

1. df.sort_values()

指定した列で昇順または降順にソートします。

df = df.sort_values('GOOG', ascending=False)
print(df)
実行結果
        DATE    GOOG
6  2024/3/30  168.83
3  2024/3/26  168.42
2  2023/3/26  167.31
4  2023/3/28  167.19
0  2023/3/24  158.56
1  2024/3/24  157.21
5  2024/3/30    <NA>

ascendingは日本語で「上昇」の意味です。
Falseが設定されていますので、降順に並び替えられます。
なので、'GOOG'列の数字が降順になっています。

また、デフォルトは昇順になっているので、 ascendingの指定がない場合は
昇順になります。

df = df.sort_values('GOOG')
print(df)
実行結果
        DATE    GOOG
1  2024/3/24  157.21
0  2023/3/24  158.56
4  2023/3/28  167.19
2  2023/3/26  167.31
3  2024/3/26  168.42
6  2024/3/30  168.83
5  2024/3/30    <NA>

一度、昇順に並び替えをし、昇順にしたデータに順にインデックスをつけ直したい場合は次の操作になります。

df = df.sort_values('GOOG').reset_index(drop=True)
print(df)
実行結果
        DATE    GOOG
0  2024/3/24  157.21
1  2023/3/24  158.56
2  2023/3/28  167.19
3  2023/3/26  167.31
4  2024/3/26  168.42
5  2024/3/30  168.83
6  2024/3/30    <NA>

直前の昇順に並べた実行結果と比較すると
index 0,1,3,4,5 の値が変わっていることが確認できます。

2. df.fillna()

欠損値を指定した値で埋めます。

df = df.fillna(0)
print(df)
実行結果
       DATE    GOOG
0  2023/3/24  158.56
1  2024/3/24  157.21
2  2023/3/26  167.31
3  2024/3/26  168.42
4  2023/3/28  167.19
5  2024/3/30    0.00
6  2024/3/30  168.83
<ipython-input-47-089b7cc944b8>:1: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`
  df = df.fillna(0)

index 5番がから0.00に変わっていることが確認できます。

3. df.dropna()

欠損値を含む行または列を削除します。

df = df.dropna()
print(df)
実行結果
        DATE    GOOG
0  2023/3/24  158.56
1  2024/3/24  157.21
2  2023/3/26  167.31
3  2024/3/26  168.42
4  2023/3/28  167.19
6  2024/3/30  168.83

index 5 番目の行が削除されたことが確認できます。




ここで、ブループ化のために一度データを追加します。

df1 = pd.DataFrame({'SIGN':['AAA','AAA','BBB','BBB','CCC','DDD','DDD'],
                    'GOOG':[158.56,157.21,167.31,168.42,167.19,pd.NA,168.83],
                    'AMZN':[186.61,181.96,184.76,185.13,186.33,187.97,188.07]
                   })

print文を実行させると以下の結果になります。

実行結果
  SIGN    GOOG    AMZN
0  AAA  158.56  186.61
1  AAA  157.21  181.96
2  BBB  167.31  184.76
3  BBB  168.42  185.13
4  CCC  167.19  186.33
5  DDD    <NA>  187.97
6  DDD  168.83  188.07

4. df.groupby()

データをグループ化します。
グループごとに合計を計算する。

grouped = df1.groupby('SIGN').sum()
print(grouped)
実行結果
        GOOG    AMZN
SING                
AAA   315.77  368.57
BBB   335.73  369.89
CCC   167.19  186.33
DDD   168.83  376.04

グループ内で最高値の値を抽出する。

grouped = df1.groupby('SING').max()
print(grouped)
実行結果
        GOOG    AMZN
SIGN                
AAA   158.56  186.61
BBB   168.42  185.13
CCC   167.19  186.33
DDD   168.83  188.07

5. df.apply()

各行または各列に任意の関数を適用します。
今回、GOOG 列の値を2倍して、新規に追加する、df['double_GOOG']の列に値を代入します。

df['double_GOOG'] = df['GOOG'].apply(lambda x: x * 2)
実行結果
        DATE    GOOG  double_GOOG
0  2023/3/24  158.56       317.12
1  2024/3/24  157.21       314.42
2  2023/3/26  167.31       334.62
3  2024/3/26  168.42       336.84
4  2023/3/28  167.19       334.38
6  2024/3/30  168.83       337.66

左側の GOOG列の値を2倍すると、左側の列 double_GOOGになることがかくにんできます。

0
1
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
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?