LoginSignup
0
0

More than 1 year has passed since last update.

pandasで値を得る時の備忘録

Last updated at Posted at 2022-02-19

pandasでcsvやtsvを読み込みして、
中の値を取り出そうとした時
数字っぽい文字列を扱う時にはまったので備忘録

pandasでtsvを読み込む

import pandas as pd
df = pd.read_csv(filepath_or_buffer=cvd.check_voice_path, encoding="utf-8", sep="\t")

文字コードと区切り文字指定して読み込む
df(データフレーム)という形式で得られる

pandasで、行をみつけて読みこむ場合

特定の列の項目と一致するものを探して
その行の要素にアクセスする

text_id text_jp text_en
1000 こんにちわ hello
def get_row(df, text_id):
    if df.empty:
        return None
    if df[df['text_id'] == int(text_id)].empty:
        return None
    return df[df['text_id'] == int(text_id)].iloc[0]

row = get_row(df, "1000")
print(row["text_jp"])

この例では、データーフレームを渡して一致したデータ行を得て
見つけたらその行の列の項目にアクセスしている。

一致するかどうかをチェックするとき、
セルの内容に応じて 型が勝手に決まるので、
この場合intにキャストして、一致しているか調べている。
もしtext_idのところに文字を入れてある場合は、
文字でも一致しているかチェックする必要もあるかも。

セル入力のヒューマンエラー

セルを入力する人が、数字か文字か曖昧だったりすると素直に比較が通らないなんてことがあったりするかもしれない

例えば、text_idにバリエーションがついて
1000_a 1000_b といった文字列になってしまっているとか起こりうる。

他にも
- 間違えて全角文字が入っている
- 指示やコメントみたいな想定フォーマットと異なる文字が入っている
- 空欄

こういうのが起こりそうな場合は、いったん整形する処理を入れてしまうのも手だったりする。
フォーマットチェックで、異なる書き方している行はスキップするなど。

なるべく綺麗なデータで処理するのが効率が良くなる。

0
0
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
0
0