【问题标题】:ValueError: arrays must all be same length in PandasValueError:数组在 Pandas 中的长度必须相同
【发布时间】:2017-11-16 22:29:12
【问题描述】:

我在关注Sentdex's second tutorial on pandas basics,遇到了这个问题。到目前为止,这是我的代码:

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import style
style.use('ggplot')

web_stats = {'Day' : [1,2,3,4,5,6],
             'Visitors' : [43,53,34,45,64,34],
             'Bounce_Rate' : [65,72,62,64,66]}

df = pd.DataFrame(web_stats)

print(df)

当这个错误信息弹出时,我真的很困惑。请注意,我使用的是 Mac。

Traceback (most recent call last):
  File "/Users/Terry/Documents/df.py", line 10, in <module>
    df = pd.DataFrame(web_stats)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pandas/core/frame.py", line 275, in __init__
    mgr = self._init_dict(data, index, columns, dtype=dtype)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pandas/core/frame.py", line 411, in _init_dict
    return _arrays_to_mgr(arrays, data_names, index, columns, dtype=dtype)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pandas/core/frame.py", line 5496, in _arrays_to_mgr
    index = extract_index(arrays)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pandas/core/frame.py", line 5544, in extract_index
    raise ValueError('arrays must all be same length')
ValueError: arrays must all be same length
>>> 

任何帮助将不胜感激。

【问题讨论】:

  • Bounce_Rate 只有 5 个值,您必须传递相同长度的数组才能创建数据帧
  • 不确定,但Bounce_Rate 只有五个值,其他有六个。
  • 如果有帮助,请考虑将答案标记为正确。欢迎来到 SO!

标签: python pandas valueerror


【解决方案1】:

Bounce_Rate 的值小于天数/访问者的数量。检查你的 web_stats 字典

即在该列表中添加一个项目(int 即一个数字)将修复它。但请确保,您注意到在下面的示例中,我根据 cmets 将列表值更改为 [65, 72, 62, 64, 54, 66]。您可能需要检查哪些值应该放在那里。

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import style
style.use('ggplot')

web_stats = {'Day' : [1,2,3,4,5,6],
             'Visitors' : [43,53,34,45,64,34],
             'Bounce_Rate' : [65, 72, 62, 64, 54, 66]}  # Copied values from tutorial according to comments.

df = pd.DataFrame(web_stats)

print(df)

【讨论】:

  • 实际列表为视频教程中的[65, 72, 62, 64, 54, 66]
  • 正确,在 Pandas 中,数据框的列必须全部具有相同的长度。您可以插入一个值(如果这是您需要的,可能只是一个错字或其他东西),或者您实际上没有该特定“跳出率”项目的值,在那里放一个 NaN
  • 更新了使用答案:65、72、62、64、54、66
【解决方案2】:

当字典值的长度不相同时会出现此错误,可以使用for循环检查键及其对应值的长度

for key, value in web_stats.items(): print(key, len(value), sep=" | ")

输出将是:

天 | 6 访客 | 6 跳出率 | 5

现在您知道 Bounce_Rate 的长度小于其他键

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-07
    • 2018-11-04
    • 2017-12-16
    • 1970-01-01
    • 1970-01-01
    • 2022-11-29
    • 2019-02-24
    相关资源
    最近更新 更多