Python bug 导入数据框的 csv 文件

问题描述 投票:0回答:1
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 文件导入到数据框中。

python pandas dataframe
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")
    

注释

您还可以尝试通过将参数

sep
pandas.read_csv
设置为
None
来强制 pandas 推断 CSV 文件的正确分隔符,如下所示:

df = pd.read_csv("Moodle/perguntas_1.csv", encoding='utf-8', sep=None, engine='python')

请注意,上述解决方案比指定正确的分隔符并使用默认的 C 引擎要慢得多。如果您的 CSV 文件中存在冲突的分隔符,它也可能不起作用。

© www.soinside.com 2019 - 2024. All rights reserved.