パンダread_csvコンバーター–例外の処理方法(literal_eval SyntaxError)

PAN

Pandas DataFrameに、次のようなcsvファイルを読み込んでいます。

          A              B
  +--------------+---------------+
0 |              | ("t1", "t2")  |
  +--------------+---------------+
1 | ("t3", "t4") |               |
  +--------------+---------------+

2つのセルには文字通りのタプルがあり、2つのセルは空です。

df = pd.read_csv(my_file.csv, dtype=str, delimiter=',',
    converters={'A': ast.literal_eval, 'B': ast.literal_eval})

コンバーターast.literal_evalは、コード内でリテラルタプルをPythonタプルオブジェクトに変換するために正常に機能しますが、空のセルがない場合に限ります。空のセルがあるため、次のエラーが発生します。

SyntaxError:解析中に予期しないEOFが発生しました

このS / Oの回答よると、空の文字列のSyntaxError例外をキャッチする必要があります。

astは、compileを使用して、ソース文字列(式である必要があります)をASTにコンパイルします。ソース文字列が有効な式(空の文字列など)でない場合、コンパイルによってSyntaxErrorが発生します。

ただし、のコンテキスト内で、個々のセルの例外をキャッチする方法がわかりませんread_csv converters

これについて行くための最良の方法は何でしょうか?それ以外の場合、空の文字列/セルを、literal_eval受け入れるか無視するオブジェクトに変換する方法はありますか

注意:私の理解では、読み取り可能なファイルにリテラルタプルを含めることが常に最善であるとは限りませんが、私の場合は便利です。

jpp

ast.literal_eval条件付きで使用するカスタム関数を作成できます

from ast import literal_eval
from io import StringIO

# replicate csv file
x = StringIO("""A,B
,"('t1', 't2')"
"('t3', 't4')",""")

def literal_converter(val):
    # replace first val with '' or some other null identifier if required
    return val if val == '' else literal_eval(val)

df = pd.read_csv(x, delimiter=',', converters=dict.fromkeys('AB', literal_converter))

print(df)

          A         B
0            (t1, t2)
1  (t3, t4)          

または、try/except使用してをキャッチすることもできますSyntaxErrorこのソリューションは、それはすなわち、他の不正な構文を扱いますように、より寛大であるSyntaxError/ValueErrorの理由によって引き起こされる他の空の値よりも。

def literal_converter(val):
    try:
        return literal_eval(val)
    except SyntaxError, ValueError:
        return val

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Pandas read_csv converter – How to handle exceptions (literal_eval SyntaxError)

分類Dev

コードのSyntaxError

分類Dev

JupyterのSyntaxError %% R

分類Dev

Microsoft EdgeJavascriptのSyntaxError

分類Dev

GLSLのSyntaxerror'varying '

分類Dev

FlaskapschedulerのSyntaxError

分類Dev

パンダの欠落データの処理read_csv

分類Dev

非ASCII文字のSyntaxError

分類Dev

非ASCII文字のSyntaxError

分類Dev

Posts#indexのSyntaxError?

分類Dev

Pythonでパンダモジュールのread_csv()をバッチ処理する方法

分類Dev

PythonデコレータのSyntaxError

分類Dev

Node.jsの「SyntaxError:Unexpected token)」

分類Dev

関数定義のSyntaxError

分類Dev

yieldステートメントのSyntaxError

分類Dev

SyntaxError:予期しないトークン 'return'

分類Dev

SyntaxError無効なトークン

分類Dev

SyntaxError:予期しないトークン 'if'

分類Dev

SyntaxError:予期しないトークンn

分類Dev

Webpack SyntaxError:予期しないトークン=>

分類Dev

SyntaxError:予期しないトークン:punc())

分類Dev

SyntaxError:予期しないトークン[--ionic

分類Dev

SyntaxError:予期しないトークン '>'

分類Dev

Nodejs「SyntaxError:予期しないトークン。」

分類Dev

Uncaught SyntaxError:予期しないトークン:

分類Dev

SyntaxError:予期しないトークン

分類Dev

Uncaught SyntaxError:予期しないトークン:

分類Dev

parsererror / SyntaxError:予期しないトークン<

分類Dev

SyntaxError:予期しないトークン