LoginSignup
0
0

More than 3 years have passed since last update.

python pandas 勉強 最近のまとめ

Last updated at Posted at 2019-11-06

要素ごとの集計

いろいろやってみたんですが、
こんな感じで落ち着きました。

for sp in set(data['要素']):
    df_op = data[data['要素'] == sp]
    com_plot(df_op,sp)  #集計する関数へ移動。

集計するファイルを1つから複数に

ファイル名称を選択していたが、
*(アスタリスク)を使うようにした。

import glob

print("トランザクションデータ読み込み開始")
csv_name    =   r"インプットデータのあるフォルダ\*.csv"
csv_files   =   glob.glob(csv_name)
list = []

for f in csv_files:
    list.append(pd.read_csv(f, index_col=0).drop(['Payment Number','Refund Number'], axis=1))
df = pd.concat(list)

複数選択することができたので、日付を入力させて動き方を変更する

「YYMMDD」、「YYMM」、「all」のいずれかを入力することで処理内容を変更する。
※トランザクションデータは日時で保持しており、月ごとにフォルダを分けているので、
 関数先で入力日付からyy、mm、ddを分解もしている。

def main():
    print("集計日付を指定「YYMMDD」 or 「YYMM」 or 「all」")
    print("集計日付の形式で取得内容を変更")
    day = input("集計日付を指定 -> ")
    print("")

    if (len(day) == 6):
        print("日時データ集計")
        df = day_data(day)
        data_plot(df,day,True)
        top_20(df,day)
    elif (len(day) == 4):
        df = o_mon_data(day)
        data_plot(df,day,True)
        top_20(df,day)
    elif (day == all):
        df = month_data()
        data_plot(df,day,False)
    else:
        print("やりなおしー")
        main()

if __name__ == '__main__':
    main()


def day_data(day):
    print("これで抽出→:", day)
    yy = day[:2]
    mm = day[2:4]

top20の作成

TOTALを付与→sort→TOTAL削除
私の環境ではTOTAK行、列の削除時にちょっと怒られる。。。

#TOTALで降順ソート
data.sort_values(['TOTAL'],ascending=False,inplace=True)

#上位20位のものを使用して、行列入れ替え
pvtop20=data[:21]

#TOTAL行、列の削除
drop_idx = ['TOTAL']
pvtop20.drop(drop_idx, inplace=True)

drop_col = ['TOTAL']
pvtop20.drop(drop_col, axis=1, inplace=True)

付加情報紐づけ

キーが同じデータから紐づけ。
辞書(dict)を使う想定だったけど、
pandasの機能がすごかった。。。

print(デイリーデータ +アルファ)
data = pd.merge(df, tenbun_meisai, on=["キー"])

perlでのcsv集計が考え方のベースだったが
なんやかんややりたいことはできてきた。

tkinter書き忘れてたから追記


import os, tkinter, tkinter.filedialog, tkinter.messagebox

# ファイル選択ダイアログの表示
root = tkinter.Tk()
root.withdraw()

#csvを抽出したいので拡張子がcsvを表示
fTyp = [("","*.csv")]

#インプットファイルが存在するフォルダを指定
iDir = r'hoge' 

#インプットファイル選択
tkinter.messagebox.showinfo('データ抽出対象選択','処理ファイルを選択してください!')

file = tkinter.filedialog.askopenfilenames(filetypes = fTyp,initialdir = iDir)

list = []
for f in file:
    list.append(pd.read_csv(f, index_col=0).drop(['Payment Number','Refund Number'], axis=1))
df = pd.concat(list)
0
0
1

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
0