IT学習日記

【Python】初心者向けPandasのデータ編集小ネタ(備忘録)

こんにちは、hokkyokunです。
Pythonを学習中ですが、モジュールもたくさんあり、
できることがVBAよりはるかに多いため、できることの整理がつかなくなってきました。

Pythonを使ってできることをまとめていき、備忘録として記録していきます。
Pandasに関する記事となります。
私は基本的にWindows使いなので、Windows使用を前提としています。
Mac使いの方は仕様に差がある場合もあるかもしれませんので、ご注意ください。

Pandasとは

Pandasはデータフレームを扱うことができるモジュールで、いわゆる2次元データの加工編集が可能となります。

エクセルのような感覚でデータを絞ったり、新たな列を作って計算させたりと、VBA使いには親和性の高いモジュールかと思います。

Pandasの準備

Pandasを扱うためには、コマンドプロンプトでPandasをインポートする必要があります。

アプリの検索で「コマンドプロンプト」もしくは「cmd」と検索してみてください

pip install pandas

これでインストールできると思います。

備忘録

データ読み込み

# モジュールをインポートする。as〇〇とすることで、以降〇〇でモジュールを呼び出せる。
import pandas as pd
# 一番目の引数にファイルパスを渡す。encoding引数に対応するエンコードを入れる。
df=pd.read_csv(r"ファイルパス",encoding="shift-jis")

小ネタ

  • 文字列前にrを付けておくと、文字列をまんま読み込んでくれる。
    これをしないと正規表現の読み方で処理とかされてうまく読み込んでくれない。
  • エンコードはデータを規則性をもって変換する行為にあたる。
    csvやテキストは何のエンコードで読まれているかを引数に渡さないとうまく処理してくれない。
    テキストを開くと、確認できる。
    shift-jisで登録しておくとコンピュータも読めるし、人間も読める(便利♪)

列全体の取得

# 列を一つだけ絞って表示させる。
df["列名"]

# 列を複数表示させる
df[["列名1","列名2","列名3",…]]

locでも取得できる

# locでもできる
df.loc[:,"列名"]

# 列を複数表示させる
df.loc[:,["列名1","列名2"]]

値取得と値変更

# 値を取得
df.loc[2,"列名"]
# ilocを使えば列を数値で表現できる。ただし、左から0,1,2,3となる。
df.iloc[2,1]

# 値の変更
df.loc[2,"列名"]="変更したい値、数値も可"
df.iloc[2,1]="変更したい値、数値も可"

列の追加

# df["新規列名"]=リストで追加
# 前日差を作るプログラム
lists=[]
Vals=df_["Value"].values
for i in range(len(Vals)):
    if i==0:
        lists.append(Vals[i])
    else:
        lists.append(Vals[i]-Vals[i-1])
df_["前日差"]=lists

シリーズのリスト化

# 列を一つだけ指定してその値をシリーズ化
df_["列名"].values

ワンライナー(内包表記)

# 実務で使ったコードですが
# 構成は ①ifで処理させたい内容 ②その条件 ③そのほかの処理(else) ④for文 という流れ
category="VDC"
Vals=df[df["ETF_ID"]==category]["Value"].values
lists=[Vals[i]/Vals[i]*100 if i==0 else Vals[i]/Vals[i-1]*100 for i in range(len(Vals))]

# 上記内容を普通に書くと
df_=df[df["ETF_ID"]=="VDC"]
Vals=df_["Value"].values
lists=[]
for i in range(len(Vals)):
    if i==0:
        lists.append(Vals[i]/Vals[i]*100)
    else:
        lists.append(Vals[i]/Vals[i-1]*100)

tolist()とvaluesの違い

lists=df["ETF_ID"].tolist()
print("tolist()","\n",type(lists),"\n",f"lists[0]: {lists[0]}","\n",f"要素数:{len(lists)}")

lists=df["ETF_ID"].values
print("values","\n",type(lists),"\n",f"lists[0]: {lists[0]}","\n",f"要素数:{len(lists)}")

# tolist() 
#  <class 'list'> 
#  lists[0]: VDC 
#  要素数:261
# values 
#  <class 'numpy.ndarray'> 
#  lists[0]: VDC 
#  要素数:261

リスト4