【问题标题】:How to resolve ValueError: Columns must be same length as key?如何解决 ValueError:列必须与键长度相同?
【发布时间】:2021-07-10 06:41:24
【问题描述】:

我有一个巨大的数据集(104259 行),在 game 列的某处,有一个或多个值具有多个 " - " 分隔符,我试图将这些列拆分。

我的示例数据框是:

df:
+-----+--------------+----------------+-------------+--------+---------------------------------------+----------+-------------+-------------+-------------+-----------+------------------------------+
|     |   Unnamed: 0 |   Unnamed: 0.1 | date        | time   | game                                  | score    | home_odds   | draw_odds   | away_odds   | country   | league                       |
+=====+==============+================+=============+========+=======================================+==========+=============+=============+=============+===========+==============================+
|   0 |            0 |              0 | nan         | 15:30  | Iliria Kruja - Cerrik                 | 0:3      | -           | -           | -           | Albania   | First Division               |
+-----+--------------+----------------+-------------+--------+---------------------------------------+----------+-------------+-------------+-------------+-----------+------------------------------+
|   1 |            1 |              1 | 25 Jul 2020 | 15:30  | Elbasani - Devolli                    | 3:1      | -           | -           | -           | Albania   | First Division               |
+-----+--------------+----------------+-------------+--------+---------------------------------------+----------+-------------+-------------+-------------+-----------+------------------------------+
|   2 |            2 |              2 | 11 Jul 2020 | 15:30  | Beselidhja Lezha - Kastrioti          | 2:0      | 1.46        | 3.80        | 6.40        | Albania   | First Division               |
+-----+--------------+----------------+-------------+--------+---------------------------------------+----------+-------------+-------------+-------------+-----------+------------------------------+
|   3 |            3 |              3 | 05 Jul 2020 | 15:30  | Lushnja - Apolonia Fier               | 1:2      | 2.39        | 3.56        | 2.44        | Albania   | First Division               |
+-----+--------------+----------------+-------------+--------+---------------------------------------+----------+-------------+-------------+-------------+-----------+------------------------------+

当我运行这部分代码时:

df[['home_team', 'away_team']] = df['game'].str.split(' - ', expand=True)

我收到此错误:

        Traceback (most recent call last):
  File "C:/Users/harsh/AppData/Roaming/JetBrains/PyCharmCE2021.1/scratches/scratch_37.py", line 22, in <module>
    df[['home_team', 'away_team']] = df['game'].str.split(' - ', expand=True)
  File "C:\Python\lib\site-packages\pandas\core\frame.py", line 3160, in __setitem__
    self._setitem_array(key, value)
  File "C:\Python\lib\site-packages\pandas\core\frame.py", line 3189, in _setitem_array
    raise ValueError("Columns must be same length as key")
ValueError: Columns must be same length as key

虽然我怀疑str.split 不止一次遇到一个或多个行,但我不确定哪些行。

现在,我可以选择:

  1. 如果此类数据的行数较少(少于 10 个),我可以安全地选择删除它们或
  2. 如果超过 10 行,我可以在第一次遇到此分隔符时将它们拆分。

我只是不确定如何在代码方面做到这一点。

我该如何检查和解决这个问题?

【问题讨论】:

  • 您使用的是哪个版本的 pandas?
  • @quest 我正在使用 pandas v 1.2.3
  • 总是将完整的错误消息(从单词“Traceback”开始)作为文本(不是截图,不是链接到外部门户)有问题(不是评论)。还有其他有用的信息。
  • @furas 当然。我早该知道的。已更新问题。谢谢
  • @PyNoob_N,您确定 game 列是否在所有行中都有 -

标签: python pandas dataframe


【解决方案1】:

您的某些行可能不止一个 " - " 字符串。如果您对结构非常确定并且想在第一次遇到分隔符时进行拆分,请使用以下n 参数,如下所示:

df['game'].str.split(' - ', expand=True, n=1)

文档here

【讨论】:

  • 谢谢。但是,我有什么方法可以检查发生这种情况的数据吗?
  • 它可能可以使用 pd.Series.str.count 方法来过滤您的数据框。类似的东西: df.loc[lambda x: x['game'].str.count(' - ') != 1]
猜你喜欢
  • 2019-02-24
  • 1970-01-01
  • 2022-01-09
  • 1970-01-01
  • 2022-11-29
  • 1970-01-01
  • 2022-01-23
  • 2018-11-04
相关资源
最近更新 更多