CSVファイルの読み込み 列ごとの型の指定

read_csv()はデフォルトでは、各列のデータの値から型を自動的に推測して読み込みます。
たとえば、次のようなファイルについて考えてみましょう。

CSVファイルsample_1.csv

A,B,C
東京,10,1.1
大阪,20,2.1
名古屋,30,3.5

上記のファイルをデフォルトで読み込むと、列Aは文字列、列Bは整数、列Cは浮動小数点数として読み込みます。
(正確には、列Aの個々のデータは文字列ですが、列Aの要素の型としては「任意の型」を示すobject型となります)

実際にread_csv()を使って読み込んで型を確認すると、次のような結果になります。

# デフォルトの設定で読み込み
df = pd.read_csv("sample_1.csv")
# 型の確認
df.dtypes
A     object
B      int64
C    float64
dtype: object
ABC
0東京101.1
1大阪202.1
2名古屋303.5

型を自動で推測する機能は、便利な反面、期待とは違う結果になることもあります。

たとえば、次のファイルでは都市コードを4桁の数字で表しています。

CSVファイルsample_2.csv

都市コード,都市名
0001,東京
0002,大阪
0003,名古屋

しかし、read_csv()を使って読み込むと、列都市コードは「"0001"という文字列」ではなく「1という整数」だと解釈されてしまいます。

# デフォルトの設定で読み込み
df = pd.read_csv("sample_2.csv")
# 型の確認
df.dtypes
都市コード     int64
都市名      object
dtype: object
都市コード都市名
01東京
12大阪
23名古屋

ファイルを読み込んだ後にデータを加工して元に戻すこともできますが、煩雑です。
そのため、このようなケースでは 引数dtypeを使って型を明示的に指定 します。
引数dtypeは、キーが列名、値が型の辞書で指定します。

# 各列の型を指定して読み込み
df = pd.read_csv(dtype={列名: 型})

たとえば、列都市コードを文字列として読み込みたい場合、{"都市コード": str}と指定します。

# 列「都市コード」の型を指定して読み込み
df = pd.read_csv("sample_2.csv", dtype={"都市コード": str})
df.dtypes
都市コード    object
都市名      object
dtype: object
都市コード都市名
00001東京
10002大阪
20003名古屋

コメント

タイトルとURLをコピーしました