【问题标题】:Error in importing text file from a URL to a pandas dataframe将文本文件从 URL 导入到 pandas 数据框时出错
【发布时间】:2021-12-22 02:22:36
【问题描述】:

我正在尝试将文本文件的内容从网页导入 pandas 数据框。

但是,当我尝试使用以下代码导入并尝试打印列名时,出现以下错误。

import pandas as pd

df = pd.read_csv(
    "http://cs.joensuu.fi/sipu/datasets/s1.txt",
    index_col=None,
    sep=" "
)

这会导致以下错误:

File "/Users/user/Desktop/Folder/Src/spiral.py", line 8, in <module>
    df = pd.read_csv('http://cs.joensuu.fi/sipu/datasets/s1.txt', index_col=None, sep=" ")
  File "/Users/user/miniforge3/envs/test_venv/lib/python3.8/site-packages/pandas/io/parsers.py", line 610, in read_csv
    return _read(filepath_or_buffer, kwds)
  File "/Users/user/miniforge3/envs/test_venv/lib/python3.8/site-packages/pandas/io/parsers.py", line 468, in _read
    return parser.read(nrows)
  File "/Users/user/miniforge3/envs/test_venv/lib/python3.8/site-packages/pandas/io/parsers.py", line 1057, in read
    index, columns, col_dict = self._engine.read(nrows)
  File "/Users/user/miniforge3/envs/test_venv/lib/python3.8/site-packages/pandas/io/parsers.py", line 2061, in read
    data = self._reader.read(nrows)
  File "pandas/_libs/parsers.pyx", line 756, in pandas._libs.parsers.TextReader.read
  File "pandas/_libs/parsers.pyx", line 771, in pandas._libs.parsers.TextReader._read_low_memory
  File "pandas/_libs/parsers.pyx", line 827, in pandas._libs.parsers.TextReader._read_rows
  File "pandas/_libs/parsers.pyx", line 814, in pandas._libs.parsers.TextReader._tokenize_rows
  File "pandas/_libs/parsers.pyx", line 1951, in pandas._libs.parsers.raise_parser_error
pandas.errors.ParserError: Error tokenizing data. C error: Expected 9 fields in line 1334, saw 10

如何将上述 URL 中的文本文件作为单独的列导入 pandas 数据框?

【问题讨论】:

    标签: python-3.x pandas dataframe


    【解决方案1】:

    此错误消息表示一行没有预期的列数(10 而不是 9)。

    read.csv() method 的 Pandas 文档中所述,您可以通过将 on_bad_lines 设置为 "skip" 来选择跳过错误行,如下所示:

    import pandas as pd
    
    df = pd.read_csv(
        "http://cs.joensuu.fi/sipu/datasets/s1.txt",
        index_col=None,
        sep=" ",
        on_bad_lines="skip",
    )
    
    print(df)
    # Outputs
          Unnamed: 0  Unnamed: 1  Unnamed: 2  ...  Unnamed: 6  Unnamed: 7  550946
    0            NaN         NaN         NaN  ...         NaN         NaN  557965
    1            NaN         NaN         NaN  ...         NaN         NaN  575538
    2            NaN         NaN         NaN  ...         NaN         NaN  551446
    3            NaN         NaN         NaN  ...         NaN         NaN  608046
    4            NaN         NaN         NaN  ...         NaN         NaN  557588
    ...          ...         ...         ...  ...         ...         ...     ...
    4921         NaN         NaN         NaN  ...         NaN         NaN  853940
    4922         NaN         NaN         NaN  ...         NaN         NaN  863963
    4923         NaN         NaN         NaN  ...         NaN         NaN  861267
    4924         NaN         NaN         NaN  ...         NaN         NaN  858702
    4925         NaN         NaN         NaN  ...         NaN         NaN  842566
    

    【讨论】:

    • 我在运行代码 sn-p 时收到 on_bad_lines 的类型错误(意外的关键字参数)。不应该是error_bad_lines吗?
    • 从 Pandas 1.3.0 版本开始,error_bad_lines 已被弃用,而应使用 on_bad_lines 参数。请注意,如果您使用的是旧版本的 Pandas,则必须将 error_bad_lines 参数设置为“False”而不是“skip”以删除错误行。
    猜你喜欢
    • 2019-09-01
    • 2013-06-22
    • 2020-09-05
    • 2012-12-11
    • 1970-01-01
    • 2018-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多