import pandas as pd
# Read the CSV file with the specified encoding
df = pd.read_csv("Moodle/perguntas_1.csv", encoding = 'utf-8')
# Display the DataFrame
print(df)
它不会将 csv 文件导入到数据框中。 出现以下错误
Traceback (most recent call last):
File "C:\Users\Carlos-DESKTOP\Documents\Universidade\Licenciatura - Eng.ª Informática\1º Ano\2º Semestre\Laboratório de programação\moodle_test.py", line 13, in <module>
df = pd.read_csv("Moodle/perguntas_1.csv", encoding = 'utf-8')
File "C:\Users\Carlos-DESKTOP\AppData\Roaming\Python\Python312\site-packages\pandas\io\parsers\readers.py", line 1026, in read_csv
return _read(filepath_or_buffer, kwds)
File "C:\Users\Carlos-DESKTOP\AppData\Roaming\Python\Python312\site-packages\pandas\io\parsers\readers.py", line 626, in _read
return parser.read(nrows)
File "C:\Users\Carlos-DESKTOP\AppData\Roaming\Python\Python312\site-packages\pandas\io\parsers\readers.py", line 1923, in read
) = self._engine.read( # type: ignore[attr-defined]
File "C:\Users\Carlos-DESKTOP\AppData\Roaming\Python\Python312\site-packages\pandas\io\parsers\c_parser_wrapper.py", line 234, in read
chunks = self._reader.read_low_memory(nrows)
File "parsers.pyx", line 838, in pandas._libs.parsers.TextReader.read_low_memory
File "parsers.pyx", line 905, in pandas._libs.parsers.TextReader._read_rows
File "parsers.pyx", line 874, in pandas._libs.parsers.TextReader._tokenize_rows
File "parsers.pyx", line 891, in pandas._libs.parsers.TextReader._check_tokenize_status
File "parsers.pyx", line 2061, in pandas._libs.parsers.raise_parser_error
pandas.errors.ParserError: Error tokenizing data. C error: Expected 1 fields in line 3, saw 2
使用 pandas 库将此 csv 文件导入到数据框中。
您遇到的错误可能是由于读取 CSV 文件时
pandas
预期的列数与文件第 3 行中找到的列数存在差异所致。这种错误通常出现在 CSV 文件使用与默认值 ","
不同的分隔符的情况下。
要解决此问题,您可以尝试以下方法:
指定正确的分隔符:检查 CSV 文件中使用的分隔符。如果文件使用不同的分隔符(例如分号
;
、制表符 \t
或空格
),则需要使用 sep
参数指定它。查看您提供的图像,您似乎正在使用用葡萄牙语编写的数据,例如巴西的默认分隔符是 ";"
而不是“,”。要直观地检查分隔符,您可以使用如下代码:
with open("Moodle/perguntas_1.csv", "r", encoding="utf-8") as fh:
text = fh.read()
print(text)
如果实际上文件没有使用
","
作为分隔符,而是使用 ";"
,您可以将其指定为 pandas.read_csv
,如下所示:
df = pd.read_csv("Moodle/perguntas_1.csv", encoding='utf-8', sep=';')
处理不规则的列数:如果问题是由于行间的列数不规则而导致的,并且您想忽略这些差异,则可以将参数
on_bad_lines
设置为"skip"
并跳过坏行。或者,如果您希望 pandas 警告您跳过了哪些行,您可以将参数 on_bad_lines
设置为 "warn"
。以下是有关如何在读取 CSV 文件时跳过错误行并发出警告的示例:
on_bad_lines="warn")
df = pd.read_csv("Moodle/perguntas_1.csv", encoding='utf-8', on_bad_lines="skip")
您还可以尝试通过将参数
sep
从 pandas.read_csv
设置为 None
来强制 pandas 推断 CSV 文件的正确分隔符,如下所示:
df = pd.read_csv("Moodle/perguntas_1.csv", encoding='utf-8', sep=None, engine='python')
请注意,上述解决方案比指定正确的分隔符并使用默认的 C 引擎要慢得多。如果您的 CSV 文件中存在冲突的分隔符,它也可能不起作用。