从文件夹中导入 Python 3 中的 .csv 文件

Posted

技术标签:

【中文标题】从文件夹中导入 Python 3 中的 .csv 文件【英文标题】:Importing .csv file in Python 3 from folder 【发布时间】:2019-06-13 22:08:35 【问题描述】:

同一位置有 2 个 csv 文件: 1-候选人.csv 2- Store.csv

当我在使用此代码时导入 Candidate.csv 文件时,它正在被导入:

data=pandas.read_csv("C:\\Users\\Nupur\\Desktop\\Ankit\\candidates.csv")

但是当我使用相同的代码导入 Store.csv 文件时,它给出了错误:

data=pandas.read_csv("C:\\Users\\Nupur\\Desktop\\Ankit\\Store.csv")

错误:

UnicodeDecodeError Traceback(最近调用 最后)pandas_libs\parsers.pyx 在 pandas._libs.parsers.TextReader._convert_tokens()

pandas_libs\parsers.pyx 在 pandas._libs.parsers.TextReader._convert_with_dtype()

pandas_libs\parsers.pyx 在 pandas._libs.parsers.TextReader._string_convert()

pandas_libs\parsers.pyx in pandas._libs.parsers._string_box_utf8()

UnicodeDecodeError: 'utf-8' 编解码器无法解码位置 0xf6 字节 9: 无效的起始字节

在处理上述异常的过程中,又发生了一个异常:

UnicodeDecodeError Traceback(最近调用 最后)在 ----> 1 个数据=pandas.read_csv("C:\Users\Nupur\Desktop\Ankit\Store.csv")

C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\parsers.py 在 parser_f(filepath_or_buffer, sep, delimiter, header, names, index_col, usecols,挤压,前缀,mangle_dupe_cols,dtype,引擎,转换器, true_values、false_values、skipinitialspace、skirows、nrows、 na_values,keep_default_na,na_filter,详细,skip_blank_lines, parse_dates, infer_datetime_format, keep_date_col, date_parser, dayfirst,迭代器,块大小,压缩,千位,十进制, lineterminator,quotechar,quoting,escapechar,注释,编码, 方言,tupleize_cols,error_bad_lines,warn_bad_lines,skipfooter, 双引号,delim_whitespace,low_memory,memory_map, 浮点精度) 第676章 677 --> 678 返回 _read(filepath_or_buffer, kwds) 679 680 parser_f.名称 = 名称

C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\parsers.py 在 _read(filepath_or_buffer, kwds) 444 445 尝试: --> 446 数据 = parser.read(nrows) 最后447: 第448章

C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\parsers.py 在 读取(自我,nrows)1034引发ValueError('skipfooter 不支持迭代')1035 -> 1036 ret = self._engine.read(nrows) 1037 1038 # 可能改变列/col_dict

C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\parsers.py 在 读取(自我,nrows)1846 def 读取(自我,nrows=None):1847 尝试: -> 1848 data = self._reader.read(nrows) 1849 除了 StopIteration: 1850 if self._first_chunk:

pandas_libs\parsers.pyx in pandas._libs.parsers.TextReader.read()

pandas_libs\parsers.pyx 在 pandas._libs.parsers.TextReader._read_low_memory()

pandas_libs\parsers.pyx 在 pandas._libs.parsers.TextReader._read_rows()

pandas_libs\parsers.pyx 在 pandas._libs.parsers.TextReader._convert_column_data()

pandas_libs\parsers.pyx 在 pandas._libs.parsers.TextReader._convert_tokens()

pandas_libs\parsers.pyx 在 pandas._libs.parsers.TextReader._convert_with_dtype()

pandas_libs\parsers.pyx 在 pandas._libs.parsers.TextReader._string_convert()

pandas_libs\parsers.pyx in pandas._libs.parsers._string_box_utf8()

UnicodeDecodeError: 'utf-8' 编解码器无法解码位置 0xf6 字节 9: 无效的起始字节

【问题讨论】:

UnicodeDecodeError when reading CSV file in Pandas with Python的可能重复 Ankit,你试过encoding='utf-8' 吗? 【参考方案1】:

你试过了吗:

data=pandas.read_csv("C:\\Users\\Nupur\\Desktop\\Ankit\\Store.csv", encoding='utf-8')

如果上述方法不起作用,那么您的编码格式似乎不同,我建议为 Windows 选择一些编码,例如 encoding='iso-8859-1'encoding='cp1252'encoding='latin1'

或者尝试在文件名前添加r,这样它就会被视为“raw string”,这样反斜杠就不会被特殊处理:

data=pandas.read_csv(r"C:\\Users\\Nupur\\Desktop\\Ankit\\Store.csv", encoding='cp1252')

【讨论】:

【参考方案2】:

如果您因为文件编码不是pd.read_csv() 文档中提到的默认编码而遇到编码错误,您可以通过首先安装chardet 后跟以下代码来查找文件的编码:

import chardet    
rawdata = open('D:\\path\\file.csv', 'rb').read()
result = chardet.detect(rawdata)
charenc = result['encoding']
print(charenc)

这将为您提供文件的编码。

一旦你有了编码,你就可以读成:

pd.read_csv('D:\\path\\file.csv',encoding = 'encoding you found')

pd.read_csv(r'D:\path\file.csv',encoding = 'encoding you found')

你会得到所有编码here的列表

希望你觉得这很有用。

【讨论】:

【参考方案3】:

试试这个,

data=pandas.read_csv("C:\\Users\\Nupur\\Desktop\\Ankit\\Store.csv",encoding = "ISO-8859-1")

【讨论】:

以上是关于从文件夹中导入 Python 3 中的 .csv 文件的主要内容,如果未能解决你的问题,请参考以下文章

python从Microsoft Excel文件中导入数据

如何从neo4j中的csv文件中导入相同标签的节点之间的关系?

如何使用 read_csv 从文件中导入某些行

python 在Pandas中导入CSV文件(Python)

python 在Pandas中导入CSV文件并转换值

从字符串而不是从文件中导入-Csv?