pandasでcsvやtsvを読み込みして、
中の値を取り出そうとした時
数字っぽい文字列を扱う時にはまったので備忘録
pandasでtsvを読み込む
.py
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 |
.py
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 といった文字列になってしまっているとか起こりうる。
他にも
- 間違えて全角文字が入っている
- 指示やコメントみたいな想定フォーマットと異なる文字が入っている
- 空欄
こういうのが起こりそうな場合は、いったん整形する処理を入れてしまうのも手だったりする。
フォーマットチェックで、異なる書き方している行はスキップするなど。
なるべく綺麗なデータで処理するのが効率が良くなる。