web-dev-qa-db-ja.com

Pythonエントリ内の ';'および '、'で区切られたCSVソートコード(パンダ?)をインポートします

CSVファイルをPythonにインポートする必要があります。ファイルは ';'で区切られ、英語以外の記号とコンマ( '、')を含む文字列が含まれています。

私は投稿を読みました:

Pythonを使用してCSVファイルをsqlite3データベーステーブルにインポートする

Pythonはcsvをリストにインポートします

私が走るとき:

with open('d:/trade/test.csv', 'r') as f1:
    reader1 = csv.reader(f1)
    your_list1 = list(reader1)

問題が発生しました:コンマが「-」記号に変更されました。

私が試してみると:

df = pandas.read_csv(csvfile)

エラーが発生しました:

pandas.io.common.CParserError:データのトークン化中にエラーが発生しました。 Cエラー:13行目に1つのフィールドが必要で、2が表示されました。

助けてください。 CSVファイルのすべてのフィールド名をリストせずにコードが短いため、pandasを使用することをお勧めします。

一時的にカンマを置き換える回避策がある可能性があることを理解しています。それでも、パンダへのいくつかのパラメータでそれを解決したいと思います。

7

パンダソリューション-使用 read_csv 正規表現区切り文字付き[;,]。追加する必要がありますengine='python'、警告のため:

ParserWarning:「c」エンジンは正規表現セパレーターをサポートしていないため、「python」エンジンにフォールバックします(1文字を超え、「\ s +」とは異なるセパレーターは正規表現として解釈されます)。 engine = 'python'を指定することで、この警告を回避できます。

import pandas as pd
import io

temp=u"""a;b;c
1;1,8
1;2,1
1;3,6
1;4,3
1;5,7
"""
#after testing replace io.StringIO(temp) to filename
df = pd.read_csv(io.StringIO(temp), sep="[;,]", engine='python')
print (df)

   a  b  c
0  1  1  8
1  1  2  1
2  1  3  6
3  1  4  3
4  1  5  7
11
jezrael

パンダのドキュメントには、パラメータについて記載されています。

pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html

sep : str, default ‘,’

    Delimiter to use. If sep is None, will try to automatically determine this.

Pandasは、;で区切られたファイルを解析しませんでした。これは、デフォルトがNoneでなく、,であるためです。 seppandasパラメータセットを;に追加すると、問題が修正されました。

2

CSVファイルが壊れていない限り、csvにフォーマットを推測させることができます。

import csv

with open('d:/trade/test.csv', 'r') as f1:
    dialect = csv.Sniffer().sniff(f1.read(1024))
    f1.seek(0)
    r = csv.reader(f1, dialect=dialect)
    for row in r:
        print(row)
1
totoro

エンコーディングを指定してみてください。読み取ろうとしているファイルのエンコーディングを確認する必要があります。

この例ではASCII)を使用しましたが、異なる場合があります。

df = pd.read_csv(fname, encoding='ascii')
0
Santosh Pathak