LoginSignup
3
6

More than 3 years have passed since last update.

Excelでこんなことやってたよなー、をPythonに置き換える

Last updated at Posted at 2020-05-19

メモ書き、これまでexcelで頑張ってたことをPythonに置き換える中で調べたことをメモメモ
pandasとnumpy使えるようにトレーニング中
超初心者なのでこれが最適なのかは不明、今後の自分に期待

データを連結させる(縦方向)

pd.concat([dfA, dfB], ignore_index=True)

ignore_index=True でindexをふり直し。こーゆーの一気にできるのが嬉しい。

データを結合させる(横方向)

1、結合キーとなるカラム名が同じ場合

pd.merge(dfA,dfB[["columnA","columnB","columnC" ]],on = "columnA", how="left")   

dfAにdfBを結合。onで結合する際のキーを指定。howで結合方法を指定。
似たようなものにjoinというのもあったけどとりあえずパス。あとで調べる。

2、結合キーとなるカラム名が違う場合

pd.merge(dfA, dfB, left_on = "columnA", right_on = "columnB", how="left")   

left_onとright_onでカラム名指定する

売上点数と商品単価から売上列を作る

df['sales'] = df['quantity'] * df['price']

作る列名を指定して、単純に掛け算。売上は英語でsalesであってるのか。知らん。

基本統計量の把握

df.describe()

これほんと便利。Pythonに置き換える決意して良かったと思う瞬間。

入力がめちゃくちゃな日付を統一する

1、数値データを日付に変換
zzz = df['datetime'].astype(str).str.isdigit()
xxx = pd.to_timedelta(df.loc[zzz, 'datetime'].astype('float'), unit='D')+pd.to_datetime("1900/01/01")

1行目で数値データとして取り込んでしまったものを特定している。.str.isdigit()は「全ての文字が数字なら真、そうでなければ偽」
2行目で数値をDatetime型に変換。to_timedeltaでDatetime型に変換。

2、正しいデータも念のため書式統一
yyy = pd.to_datetime(df.loc[~zzz, 'datetime'])

区切り文字とかが違うかもしれないので1でやった処理と同様にdatetime型にする。
~zzzでzzzじゃないところ。つまり ~zzz = (zzz = False)

3、変換したデータを結合
df['datetime'] = pd.concat([xxx, yyy])

変換したデータを結合して元のデータ列にあてこむ。これは便利だ

月別でデータ集計(日付データしかない時)

1、年月列を作る
df['datetime']  = pd.to_datetime(df['datetime'])
df['month'] = df['datetime'].dt.strftime('%Y%m')

1行目でdatetime型に変換して、2行目で年月だけを取り出す。
.dt.strftimeで時刻を文字列に変換。
2020/4/1 → 202004
となる。

2、月別集計
df.groupby('month').sum()['sales']

groupbyでまとめたい列を指定。その後に集計方法。売上だけ表示したいので['sales']を記載。
え、まって、めっちゃ楽。
groupbyは階層集計にすることもできる

3、階層集計
df.groupby('month','product_name').sum()['sales']

月別商品別集計のできあがり

ピボットテーブルを作る

pd.pivot_table(df, index='product_name', columns='month', values=['sales'], aggfunc='sum')

長いけどやりたいことを1つ1つ記述しているのでわかりやすい。
行に商品名、列に年月、値は売上、aggfuncは値の集計方法。Excelでやってる時と操作イメージは全く同じ

大文字小文字を統一する

df['product_name'].str.upper()
df['product_name'].str.lower()
df['product_name'].str.capitalize()

1つ目が小文字を大文字に、2つ目が大文字を小文字に、3つ目が先頭文字だけ大文字あとは小文字に
結構使う

余計な空白埋める

df['product_name'].str.replace(' ','')

.str.replaceは文字置き換え。空白を何もない状態に置き換えてる。これも便利

欠損値チェッカー

.df.isnull().any(axis=0)

これで各列に欠損値があるかわかる。True or Falseで返ってきます。axisの方向が覚えられなくて辛い。

まとめ

Excelに比べて慣れると操作が格段に早く、何より検算がかなり早くできる印象。
データ分析前の処理をもっと早くできるように精進しよう。

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