Python导入CSV短代码(pandas?)用';'分隔。和','在entires

时间:2016-06-19 06:08:08

标签: python csv pandas dataframe separator

我需要在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:标记数据时出错。 C错误:第13行预计有1个字段,见2。

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

据我所知,暂时可以替换逗号。不过,我想通过一些参数解决它到熊猫。

5 个答案:

答案 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)