Python 导入 CSV 排序代码 (pandas?) 以 ';' 分隔和','在条目中

Python import CSV short code (pandas?) delimited with ';' and ',' in entires

我需要在 Windows 上的 Python 中导入一个 CSV 文件。我的文件由“;”分隔并且包含带有非英语符号和逗号 (',') 的字符串。

我读过帖子:

Importing a CSV file into a sqlite3 database table using Python

Python import csv to list

当我运行:

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: Error tokenizing data. C error: Expected 1 fields in line 13, saw 2.

请帮忙。我更愿意使用 pandas,因为代码更短,没有列出 CSV 文件中的所有字段名称。

我知道可以临时替换逗号。尽管如此,我还是想通过 pandas.

的一些参数来解决它

除非您的 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)

Pandas 文档说参数:

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 表示自动而是 ,。为 pandas 添加 sep 参数集到 ; 解决了这个问题。

Pandas 解决方案 - 使用 read_csv 和正则表达式分隔符 [;,]。您需要添加 engine='python',因为警告:

ParserWarning: Falling back to the 'python' engine because the 'c' engine does not support regex separators (separators > 1 char and different from '\s+' are interpreted as regex); you can avoid this warning by specifying 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

尝试指定编码,您需要找出第一个文件的编码是什么。

我在此示例中使用了 ASCII,但它可能会有所不同。

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

为避免代码中出现以下警告,

ParserWarning: Falling back to the 'python' engine because the 'c' engine does not support regex separators (separators > 1 char and different from '\s+' are interpreted as regex); you can avoid this warning by specifying engine='python'

read_csv 函数中使用 属性 名称。检查此警告出现和不出现两种情况的示例。

引发警告的代码:

selEncoding = "ISO-8859–1"

dfCovid19DS = pd.read_csv(dsSrcPath, selEncoding)

没有警告的代码:

selEncoding = "ISO-8859–1"

dfCovid19DS = pd.read_csv(dsSrcPath, encoding = selEncoding)