我需要在Windows上用Python导入CSV文件。我的文件由';'分隔。并且包含非英文符号和逗号的字符串(',')。
我已阅读帖子:
Importing a CSV file into a sqlite3 database table using Python
当我跑步时:
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。
请帮忙。我更喜欢使用pandas,因为代码较短而没有列出CSV文件中的所有字段名称。
据我所知,暂时可以替换逗号。不过,我想通过一些参数解决它到熊猫。
答案 0 :(得分:7)
Pandas 解决方案 - 将read_csv
与正则表达式分隔符[;,]
一起使用。您需要添加engine='python'
,因为警告:
ParserWarning:回退到'python'引擎,因为'c'引擎不支持正则表达式分隔符(分隔符> 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
答案 1 :(得分:1)
除非您的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)
答案 2 :(得分:1)
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.
仍然没有得到我的文件被';'分隔。出于某种原因,列名相当简单。向panda添加sep
参数可以解决问题。
答案 3 :(得分:0)
尝试指定编码,您将需要找出试图读取的文件的编码。
在此示例中,我使用了ASCII,但可能有所不同。
df = pd.read_csv(fname, encoding='ascii')
答案 4 :(得分:0)
为避免代码中出现以下警告,
ParserWarning:回退到“ python”引擎,因为“ c”引擎不支持正则表达式分隔符(分隔符> 1个字符且与“ \ s +”不同的分隔符被解释为正则表达式);您可以通过指定engine ='python'
来避免此警告
在lower + [pivot] + greater
函数中使用属性名称。请查看示例,以了解此警告出现与否的情况。
发出警告的代码:
read_csv
无警告代码:
selEncoding = "ISO-8859–1"
dfCovid19DS = pd.read_csv(dsSrcPath, selEncoding)