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
A | B | C | |
---|---|---|---|
0 | 東京 | 10 | 1.1 |
1 | 大阪 | 20 | 2.1 |
2 | 名古屋 | 30 | 3.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
都市コード | 都市名 | |
---|---|---|
0 | 1 | 東京 |
1 | 2 | 大阪 |
2 | 3 | 名古屋 |
ファイルを読み込んだ後にデータを加工して元に戻すこともできますが、煩雑です。
そのため、このようなケースでは 引数dtype
を使って型を明示的に指定 します。
引数dtype
は、キーが列名、値が型の辞書で指定します。
# 各列の型を指定して読み込み
df = pd.read_csv(dtype={列名: 型})
たとえば、列都市コード
を文字列として読み込みたい場合、{"都市コード": str}
と指定します。
# 列「都市コード」の型を指定して読み込み
df = pd.read_csv("sample_2.csv", dtype={"都市コード": str})
df.dtypes
都市コード object
都市名 object
dtype: object
都市コード | 都市名 | |
---|---|---|
0 | 0001 | 東京 |
1 | 0002 | 大阪 |
2 | 0003 | 名古屋 |
コメント