Python 导入 CSV 文件到 DataFrame 的 bug
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文件导入到数据框中。
1 个回答
0
你遇到的错误可能是因为在读取你的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")
注意事项
你也可以尝试强制pandas
推断你的CSV文件的正确分隔符,通过将pandas.read_csv
中的sep
参数设置为None
,像这样:
df = pd.read_csv("Moodle/perguntas_1.csv", encoding='utf-8', sep=None, engine='python')
请注意,上面的解决方案比指定正确的分隔符并使用默认的C引擎要慢得多。如果你的CSV文件中有冲突的分隔符,这个方法可能也不奏效。