はじめに
Pandasでよく使う処理をまとめる。使用する例は下記。
日付 | 購入店 | 種類 | 名称 | 数量 | 単価 | 価格 | |
---|---|---|---|---|---|---|---|
0 | 2024-01-04 | A | 家電 | 電球 | 4 | 1000 | 4000 |
1 | 2024-02-06 | A | 家電 | 電子レンジ | 1 | 50000 | 50000 |
2 | 2024-03-10 | A | 家電 | テレビ | 1 | 150000 | 150000 |
3 | 2024-05-06 | B | 家電 | 洗濯機 | 1 | 200000 | 200000 |
4 | 2024-05-04 | B | 家電 | エアコン | 1 | 180000 | 180000 |
5 | 2024-07-10 | B | 家電 | 照明器具 | 1 | 10000 | 10000 |
6 | 2024-10-13 | B | 家電 | 電池 | 5 | 300 | 1500 |
7 | 2024-01-06 | C | 家具 | 椅子 | 4 | 10000 | 40000 |
8 | 2024-02-07 | C | 家具 | 机 | 1 | 50000 | 50000 |
9 | 2024-03-10 | D | 家具 | タンス | 1 | 70000 | 70000 |
10 | 2024-06-10 | D | 家具 | 布団 | 2 | 30000 | 60000 |
11 | 2024-10-06 | D | 家具 | 枕 | 2 | 5000 | 10000 |
12 | 2024-07-04 | C | 文具 | シャープペンシル | 3 | 600 | 1800 |
13 | 2024-08-09 | C | 文具 | ボールペン | 3 | 300 | 900 |
14 | 2024-10-10 | C | 文具 | 消しゴム | 5 | 100 | 500 |
15 | 2024-05-06 | A | 文具 | ノート | 10 | 100 | 1000 |
16 | 2024-07-03 | B | 文具 | ノート | 10 | 100 | 1000 |
17 | 2024-04-12 | B | 文具 | ボールペン | 1 | 300 | 300 |
よく使う操作23種類
No | 定義 | 意味 |
---|---|---|
1 | df.shape | 行列の数 |
2 | df.index | 行名 |
3 | df.columns | 列名 |
4 | df.dtypes | 列の種類 |
5 | df['列名'].unique() | 特定の列のパラメータ種類 |
6 | df['列名'].value_counts() | 特定の列のパラメータの集計 |
7 | df[['列名1','列名2','列名3']] | 列の切り取り。リストで列を列挙 |
8 | df.head(行数) | 先頭から指定した行数 |
9 | df.tail(行数) | 終端から指定した行数 |
10 | df.iloc[ 行start:行end , 列start:列end ] | 行列の切り取り。行、列ともスライスで表記 |
11 | df.T | 行と列の入れ替え |
12 | df.sum() | 各列の集計。列を絞ることもできる。 |
13 | df.sort_values('列名', ascending=False/True,ignore_index=False/True) | ソート ascending=False(昇順)/True(降順) ignore_index=False(index変更無)/True(index変更有) |
14 | df[df['A'].isin(['a','b'])] | フィルタ:A列が'a'か'b'の文字列 |
15 | df[df['A'].str.contains('a')] | フィルタ:A列で'a'を含む文字列 |
16 | df[df['A'].str.endswith('a')] | フィルタ:A列で'a'で終わるの文字列 |
17 | df[df['A'].str.startswith('a')] | フィルタ:A列で'a'で始まるの文字列 |
18 | df[df['A'].str.match('...')] | フィルタ:A列で3文字の文字列(正規表現) |
19 | df.query('式') | フィルタ:query('式')でフィルタした行を切り取り |
20 | df.iloc[df['列名'].idxmax()] | 指定列の最大値の行を切り取り |
21 | df.iloc[df['列名'].idxmin()] | 指定列の最小値の行を切り取り |
22 | df.fillna(数値 or 文字列) | nanを指定した数値、文字列へ一括変換する |
23 | df.to_markdown() df.to_string() df.to_dict() df.to_json() df.to_html() df.to_clipboard() |
MarkDown形式出力 文字列形式出力 辞書形式出力 json形式出力 html形式出力 クリップボード形式出力 |
import pandas as pd
dict = {
'日付': {0: '2024-01-04', 1: '2024-02-06', 2: '2024-03-10', 3: '2024-05-06', 4: '2024-05-04', 5: '2024-07-10', 6: '2024-10-13', 7: '2024-01-06', 8: '2024-02-07', 9: '2024-03-10', 10: '2024-06-10', 11: '2024-10-06', 12: '2024-07-04', 13: '2024-08-09', 14: '2024-10-10', 15: '2024-05-06', 16: '2024-07-03', 17: '2024-04-12'},
'購入店': {0: 'A', 1: 'A', 2: 'A', 3: 'B', 4: 'B', 5: 'B', 6: 'B', 7: 'C', 8: 'C', 9: 'D', 10: 'D', 11: 'D', 12: 'C', 13: 'C', 14: 'C', 15: 'A', 16: 'B', 17: 'B'},
'種類': {0: '家電', 1: '家電', 2: '家電', 3: '家電', 4: '家電', 5: '家電', 6: '家電', 7: '家具', 8: '家具', 9: '家具', 10: '家具', 11: '家具', 12: '文具', 13: '文具', 14: '文具', 15: '文具', 16: '文具', 17: '文具'},
'名称': {0: '電球', 1: '電子レンジ', 2: 'テレビ', 3: '洗濯機', 4: 'エアコン', 5: '照明器具', 6: '電池', 7: '椅子', 8: '机', 9: 'タンス', 10: '布団', 11: '枕', 12: 'シャープペンシル', 13: 'ボールペン', 14: '消しゴム', 15: 'ノート', 16: 'ノート', 17: 'ボー ルペン'},
'数量': {0: 4, 1: 1, 2: 1, 3: 1, 4: 1, 5: 1, 6: 5, 7: 4, 8: 1, 9: 1, 10: 2, 11: 2, 12: 3, 13: 3, 14: 5, 15: 10, 16: 10, 17: 1},
'単価': {0: 1000, 1: 50000, 2: 150000, 3: 200000, 4: 180000, 5: 10000, 6: 300, 7: 10000, 8: 50000, 9: 70000, 10: 30000, 11: 5000, 12: 600, 13: 300, 14: 100, 15: 100, 16: 100, 17: 300},
'価格': {0: 4000, 1: 50000, 2: 150000, 3: 200000, 4: 180000, 5: 10000, 6: 1500, 7: 40000, 8: 50000, 9: 70000, 10: 60000, 11: 10000, 12: 1800, 13: 900, 14: 500, 15: 1000, 16: 1000, 17: 300}
}
df = pd.DataFrame(dict)
# 1.行列の数---------------------------
print(df.shape)
# (18, 7)
# 2.行名-------------------------------
print(df.index)
# Int64Index([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17], dtype='int64')
# 3.列名-------------------------------
print(df.columns)
# Int64Index([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17], dtype='int64')
# 4.列の種類---------------------------
print(df.dtypes)
# 日付 object
# 購入店 object
# 種類 object
# 名称 object
# 数量 int64
# 単価 int64
# 価格 int64
# 5.特定の列のパラメータ種類-----------
print(df['種類'].unique())
# ['家電' '家具' '文具']
# 6.特定の列のパラメータの集計---------
print(df['種類'].value_counts())
# 家電 7
# 文具 6
# 家具 5
# 7.特定の列のパラメータの集計---------
print(df[['種類','名称']])
# 種類 名称
# 0 家電 電球
# 1 家電 電子レンジ
# 2 家電 テレビ
# 3 家電 洗濯機
# 4 家電 エアコン
# ...
# 8.先頭から指定した行数--------------
print(df.head(3))
# 日付 購入店 種類 名称 数量 単価 価格
# 0 2024-01-04 A 家電 電球 4 1000 4000
# 1 2024-02-06 A 家電 電子レンジ 1 50000 50000
# 2 2024-03-10 A 家電 テレビ 1 150000 150000
# 9.終端から指定した行数--------------
print(df.tail(3))
# 日付 購入店 種類 名称 数量 単価 価格
# 15 2024-05-06 A 文具 ノート 10 100 1000
# 16 2024-07-03 B 文具 ノート 10 100 1000
# 17 2024-04-12 B 文具 ボー ルペン 1 300 300
# 10.行と列の幅を絞る-------------------
print(df.iloc[:10,3:])
# 名称 数量 単価 価格
# 0 電球 4 1000 4000
# 1 電子レンジ 1 50000 50000
# 2 テレビ 1 150000 150000
# 3 洗濯機 1 200000 200000
# 4 エアコン 1 180000 180000
# 5 照明器具 1 10000 10000
# 6 電池 5 300 1500
# 7 椅子 4 10000 40000
# 8 机 1 50000 50000
# 9 タンス 1 70000 70000
# 11.行列入れ替え-----------------------
print(df.T)
# 0 1 2 3 ... 14 15 16 17
# 日付 2024-01-04 2024-02-06 2024-03-10 2024-05-06 ... 2024-10-10 2024-05-06 2024-07-03 2024-04-12
# 購入店 A A A B ... C A B B
# 種類 家電 家電 家電 家電 ... 文具 文具 文具 文具
# 名称 電球 電子レンジ テレビ 洗濯機 ... 消しゴム ノート ノート ボー ルペン
# 数量 4 1 1 1 ... 5 10 10 1
# 単価 1000 50000 150000 200000 ... 100 100 100 300
# 価格 4000 50000 150000 200000 ... 500 1000 1000 300
#
# [7 rows x 18 columns]
# 12.降順、Index変更--------------------
print(df[['数量','単価','価格']].sum())
# 数量 56
# 単価 757800
# 価格 831000
# 13.昇順、Indexそのまま----------------
print(df.sort_values('単価', ascending=False,ignore_index=False).head(5))
# 日付 購入店 種類 名称 数量 単価 価格
# 3 2024-05-06 B 家電 洗濯機 1 200000 200000
# 4 2024-05-04 B 家電 エアコン 1 180000 180000
# 2 2024-03-10 A 家電 テレビ 1 150000 150000
# 9 2024-03-10 D 家具 タンス 1 70000 70000
# 8 2024-02-07 C 家具 机 1 50000 50000
# 13.降順、Index変更--------------------
print(df.sort_values('単価', ascending=True, ignore_index=True).head(5))
# 日付 購入店 種類 名称 数量 単価 価格
# 0 2024-05-06 A 文具 ノート 10 100 1000
# 1 2024-10-10 C 文具 消しゴム 5 100 500
# 2 2024-07-03 B 文具 ノート 10 100 1000
# 3 2024-04-12 B 文具 ボー ルペン 1 300 300
# 4 2024-08-09 C 文具 ボールペン 3 300 900
# 14.フィルタ:文字列指定
print( df[df['購入店'].isin(['A','C'])] )
# 日付 購入店 種類 名称 数量 単価 価格
# 0 2024-01-04 A 家電 電球 4 1000 4000
# 1 2024-02-06 A 家電 電子レンジ 1 50000 50000
# 2 2024-03-10 A 家電 テレビ 1 150000 150000
# 7 2024-01-06 C 家具 椅子 4 10000 40000
# 8 2024-02-07 C 家具 机 1 50000 50000
# 12 2024-07-04 C 文具 シャープペンシル 3 600 1800
# 13 2024-08-09 C 文具 ボールペン 3 300 900
# 14 2024-10-10 C 文具 消しゴム 5 100 500
# 15 2024-05-06 A 文具 ノート 10 100 1000
# 15.フィルタ:含む文字列
print( df[df['日付'].str.contains('2024-05')] )
# 日付 購入店 種類 名称 数量 単価 価格
# 3 2024-05-06 B 家電 洗濯機 1 200000 200000
# 4 2024-05-04 B 家電 エアコン 1 180000 180000
# 15 2024-05-06 A 文具 ノート 10 100 1000
# 16.フィルタ:終端文字列比較
print( df[df['種類'].str.endswith('電')] )
# 日付 購入店 種類 名称 数量 単価 価格
# 0 2024-01-04 A 家電 電球 4 1000 4000
# 1 2024-02-06 A 家電 電子レンジ 1 50000 50000
# 2 2024-03-10 A 家電 テレビ 1 150000 150000
# 3 2024-05-06 B 家電 洗濯機 1 200000 200000
# 4 2024-05-04 B 家電 エアコン 1 180000 180000
# 5 2024-07-10 B 家電 照明器具 1 10000 10000
# 6 2024-10-13 B 家電 電池 5 300 1500
# 17.フィルタ:開始文字列比較
print( df[df['種類'].str.startswith('家')] )
# 日付 購入店 種類 名称 数量 単価 価格
# 0 2024-01-04 A 家電 電球 4 1000 4000
# 1 2024-02-06 A 家電 電子レンジ 1 50000 50000
# 2 2024-03-10 A 家電 テレビ 1 150000 150000
# 3 2024-05-06 B 家電 洗濯機 1 200000 200000
# 4 2024-05-04 B 家電 エアコン 1 180000 180000
# 5 2024-07-10 B 家電 照明器具 1 10000 10000
# 6 2024-10-13 B 家電 電池 5 300 1500
# 7 2024-01-06 C 家具 椅子 4 10000 40000
# 8 2024-02-07 C 家具 机 1 50000 50000
# 9 2024-03-10 D 家具 タンス 1 70000 70000
# 10 2024-06-10 D 家具 布団 2 30000 60000
# 11 2024-10-06 D 家具 枕 2 5000 10000
# 18.フィルタ:正規表現文字列比較
print( df[df['名称'].str.match('^.{3}$')] )
# 日付 購入店 種類 名称 数量 単価 価格
# 2 2024-03-10 A 家電 テレビ 1 150000 150000
# 3 2024-05-06 B 家電 洗濯機 1 200000 200000
# 9 2024-03-10 D 家具 タンス 1 70000 70000
# 15 2024-05-06 A 文具 ノート 10 100 1000
# 16 2024-07-03 B 文具 ノート 10 100 1000
# 19.フィルタ:query()
print(df.query('価格>10000 and 購入店=="A"'))
# 日付 購入店 種類 名称 数量 単価 価格
# 1 2024-02-06 A 家電 電子レンジ 1 50000 50000
# 2 2024-03-10 A 家電 テレビ 1 150000 150000
# 20.指定列の最大値の行-----------------
print(df.iloc[df['価格'].idxmax()])
# 日付 2024-05-06
# 購入店 B
# 種類 家電
# 名称 洗濯機
# 数量 1
# 単価 200000
# 価格 200000
# 21.指定列の最大値の行-----------------
print(df.iloc[df['価格'].idxmin()])
# 日付 2024-04-12
# 購入店 B
# 種類 文具
# 名称 ボー ルペン
# 数量 1
# 単価 300
# 価格 300
#22.Nanを'0'で埋める-------------------
df.fillna(0)
#例はNonがないので変化なし
# 23.出力------------------------------
df.to_html('out.json')
df.to_html('out.html')
df.to_string('out.txt')
df.to_clipboard()