『できる 仕事がはかどる Python自動処理 全部入り。』のChapter 7で、pandasのread_csv()関数を使ったCSVファイルの読み込みについて書かれています。
桁区切りカンマの入ったデータが、どのような扱いになるのかが気になったのでテストしてみました。
桁区切りカンマの入った数字を含むCSVファイル
具体的には以下のようなCSVファイルです。
id,name,score
1,太郎,900
2,次郎,800
3,三郎,"1,000"
4,四郎,600
5,五郎,500
3列目のscoreは、基本的には数値データですが、一部に、桁区切りカンマの入ったダブルクォーテーションで括られた数字が存在します。
こんなCSVファイルないだろうと思う方はExcelからCSVファイルを作成してみてください。
pandasのread_csv()関数でCSVを読み込むサンプルスクリプト
以下のようなスクリプトを作成して実行しました。
df = pandas.read_csv(r'C:\temp\csv_sample_cp932.csv', encoding='cp932')
for row in df.values:print(row)
結果、下図のとおり3列目のすべてのデータが、「'」(シングルクォーテーション)で括られた文字列として読み込まれます。
ちなみに、3列目のデータが、すべてダブルクォーテーションで括られていたとしても、桁区切りカンマの入ったデータが存在しなければ、
1,太郎,"900"
2,次郎,"800"
3,三郎,"1000"
4,四郎,"600"
5,五郎,"500"
下図のとおり、3列目は数値として読み込まれます。
3列目のデータをダブルクォーテーションで括らない数値にしておいて実行すれば、数値として読み込まれるのは言うまでもありません。
csv.reader()関数でCSVを読み込む場合
なお、標準ライブラリのcsv.reader()関数を使った以下のようなスクリプトなら
f = open(r'C:\temp\csv_sample_cp932.csv', encoding='cp932')
csv_reader = csv.reader(f)for row in csv_reader:
print(row)
下図のとおりすべてのデータが文字列として読み込まれます。
公式ドキュメントに、
csv ファイルから読み込まれた各行は、文字列のリストとして返されます。QUOTE_NONNUMERIC フォーマットオプションが指定された場合を除き、データ型の変換が自動的に行われることはありません
と書かれているとおりです。
最終更新日時:2023-01-18 16:23
Home » Python » pandasの使い方 » pandasのread_csv()関数でCSVファイルを読み込むときの挙動