はじめに
Python初学者のわたしが覚えるために、学んだことを整理し、理解を深めるために記事を書いています。
今日はpandasです!🐼
可愛い名前のくせに、色々なことができるそうです!
pandasとは?
Excel、スプレットシート、CSVなどのデータを取得して、計算する、追加するなど自由に加工や集計をすることができます!
前提:今回はスプレッドシートからデータを処理していきます!
スプレッドシートから gspread が取ってきたデータを、Pandasの表(DataFrame)に変換してみます。
①全データを取得する
②ステータスが空白のデータを取得する
①全データ取得
【スプレッドシートのデータ】
ドーナツ名 ステータス
チュロッキー 揚げ済み
ココナッツチョコ (空白)
※空白は(””)で入っている想定です!
使用しているgspreadメソッド
ここでしていること!
・1行目を ヘッダー として認識
・各行を {列名: 値} の 辞書 に変換
・結果は 辞書のリスト
dict_data = worksheet.get_all_records()
#ターミナル
[
{'ドーナツ名': 'チュロッキー', 'ステータス': '揚げ済み'},
{'ドーナツ名': 'ココナッツチョコ', 'ステータス': ''}
]
②pandasに変換する
df = pd.DataFrame(dict_data)
これで取得したデータがpandasのDataFrameになります!
ポイント
get_all_records と get_all_valuesの違い!
get_all_recordsは辞書データとなって、1行目をヘッダーとして扱います!
get_all_valuesはリストデータとなって、1行目もデータとして扱います!
values_data = worksheet.get_all_values()
#ターミナル
[['ドーナツ名', 'ステータス'],['チュロッキー', '揚げ済み'],['ココナッツチョコ', '']]
③空白ステータス抽出
同じ空白でも正体は別物!!!
| 見た目 | 中身 | 正体 |
|---|---|---|
| 空白 | "" |
空文字(文字数0の文字列) |
| 空白 | NaN |
欠損値 (本当に何にもない) |
空白って空白でしょ?って思っていたんですが、以下のコードを書いたらNaNかどうかを判明していた!
今回のような 空文字("")には反応しませんでした〜!!😱
ポイント
そもそもどっちも見た目は空っぽ!コードで判定してようやく分かった!
【NaNの場合】
df[df['ステータス'].isna()]
#df['ステータス']はこのステータスの列だけ取り出す
#.isna()は欠損値を判定
#df[ 条件 ](行フィルタ)→Trueだけを残す
★.isna() とはpandasのメソッドでNaN(欠損値)かを判定している
★結果は True / False
【空文字””の場合】
df[df['ステータス'].astype(str).str.strip() == ""
#df['ステータス']はこのステータスの列だけ取り出す
#.astype(str) → シリーズの型を文字列に
#.str.strip() → 文字の前後に空白があった場合は削除してね
#== "" → 中身が空文字の場合だけTrue
#df[ 条件 ](行フィルタ)→Trueだけを残す
Pandasでデータを取ってきたときはSeriesという見た目は似てるけど別物になっている状態!
.tolist()を付けてるとSeriesがリストに変わるそうです!
まとめ
見た目は空白でも””(空文字)とNaN(欠損値)が存在する!
空白 = NaN とは限らない!
スプレッドシートの空白は 空文字””(空文字)の場合が多い!