1
2

More than 1 year has passed since last update.

pandasでファイルをNaNを出さずに読み込む

Last updated at Posted at 2022-10-18

概要

pandasでファイルを読み込んだときに、NaNが出ないようにするだけの小ネタです。

課題

例えばpandasで次のようなsample.csvファイルを読むとします。

a b c
a1 b1 1
a2 b2
a3 3

次のコードで読み込むと

import pandas as pd

df = pd.read_csv('sample.csv')
df.dtypes  # 各列のtypeを表示

a列:object
b列:object
c列:float

となります。(Object型にはStr型が含まれます)
c列は「int」で読んで欲しいのですが、 df.loc[1,'c'] が「NaN」になるせいで「float型」になるわけです。
しかも、困ったことにb列の3行目の df.loc[2,'b'] も、実は「NaN」で「float型」です。

で、この「NaN」の処理が大変面倒くさい。
replaceかapplyかforループで狙い撃ちするしかない。
いっそのこと全部文字で読んでもらい、あとで数値部分だけを数値型に変換したほうが楽です。

でも、全部文字で読むなんてオプションないのですよね。

df = pd.read_csv('sample.csv', dtype=str)

としても、 df.loc[1,'c'] と df.loc[2,'b'] は「NaN」で「float型」です。

解決

しかし、見つけました。
全てを文字列で読み込む方法を。
もうひと押しすれば、できたのです。

df = pd.read_csv('sample.csv', dtype=str, na_filter=False)

これです。
これで全てがきちんと文字列です。
df.loc[1,'c'] や df.loc[2,'b'] も「''」(空文字)になりました。

以上です。

1
2
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
1
2