0
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[python] pandasでcsvを読み込む際のデコード問題を回避する

Last updated at Posted at 2021-02-05

■やりたいこと

csvをpandasでデータを読み込もうと思ったら全件読み込めないままエラーも出ずに終了してしまった。
いろいろ調べてみたらデコードできない文字が混在している行が読み込めないようだということがわかった。
試行錯誤の結果、codecsを使えばいいらしい。

■解決策

  • codecsでcsvをopen
  • errorsオプションをignoreにすることでエラーをスルーさせる
  • replaceにすると、エラー箇所が?に置換される

■ライブラリ

  • pandas
  • codecs

■サンプルコード

test

import pandas as pd
import codecs

# 読み込むcsv
target = 'sample.csv'
# 出力先
out = 'output.tsv'

# csvをcodecsでopenする
# エラーは無視する
with codecs.open(target, mode='r', encoding='shift-jis', errors='ignore') as f:
    df = pd.read_csv(
            f,
            sep=',',
            engine='python',	# encodingのかわりにengine='python'にするとおまかせになるらしい
            # 特定のカラムだけ出力したい時はusecolsで設定する
            usecols=[
                'ID',
                'NAME',
                'COMPANYADDRESS__C',
                'CORPORATEADDRESS__C',
                'CORPORATIONNUMBER__C',
                'TDBCOMPANYCODE__C',
                'COUNTRY__C'
            ],
            # 一見数値に見えるカラムの値も文字として扱いたいので文字列にコンバートしておく
            # 何もしないと出力時に小数点以下がついたりするので注意
            converters={
                'ID': str,
                'CORPORATIONNUMBER__C': str,
                'TDBCOMPANYCODE__C': str
                }
    )

    # 出力
    df.to_csv(out, sep='\t',encoding='utf-8',index=False)
    
0
4
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
0
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?