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)
我需要在 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)