web-dev-qa-db-ja.com

Python pandas NameError:StringIOが定義されていません

パンダでデータを読み取ることができません:入力:

import pandas as pd

data = 'a,b,c\n1,2,3\n4,5,6'

pd.read_csv(StringIO(data),skipinitialspace=True)

出力:

NameError:name 'StringIO' is not defined

エラーが発生した理由と、インポートするものを教えてください。

6
Abhishek

ここで解決策を見つけました:

StringIOをインポートしなかったため、エラーが発生しました。 Python 2とは異なり、Python 3では、インポートする必要があります。

from io import StringIO

インポート後、エラーは発生しませんでした。上記の質問への出力は次のとおりです。

   a b c
0  1 2 3
1  4 5 6

Python 2と3の両方で機能するpandas.compatからインポートすることもできます。

from pandas.compat import StringIO
10
Abhishek

それはより良いモジュールのためにpython 3で削除されたからです。

From What’s New In Python 3.

StringIOおよびcStringIOモジュールはなくなりました。代わりに、ioモジュールをインポートし、テキストとデータにそれぞれio.StringIOまたはio.BytesIOを使用します。

try:
    from StringIO import StringIO
except ImportError:
    from io import StringIO
2
Gabriel Fair

以下のパッケージを追加してみてください。これらのパッケージは、スクリプトの先頭にこの行を追加する必要があります。

import io
from io import StringIO
import string
import pandas as pd
from pandas.compat import StringIO
from collections import Counter

try:
    from StringIO import StringIO
except ImportError:
    from io import StringIO

上記のパッケージを追加した後、以下のエラーが発生しません

ModuleNotFoundError: No module named 'StringIO'
1
Balu