Python 导入 CSV 文件到 DataFrame 的 bug

-2 投票
1 回答
43 浏览
提问于 2025-04-12 09:14
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文件使用的分隔符和默认的","不一样的情况下。

要解决这个问题,你可以尝试以下几种方法:

  1. 指定正确的分隔符:检查一下你的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=';')
    
  2. 处理不规则的列数:如果问题是因为行之间的列数不一致,而你想忽略这些差异,可以将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文件中有冲突的分隔符,这个方法可能也不奏效。

撰写回答