【问题标题】:ValueError: arrays must all be same length in python using pandas DataFrameValueError:数组必须在python中使用pandas DataFrame的长度相同
【发布时间】:2017-12-16 12:56:46
【问题描述】:

我是 python 新手,使用 pandas 包 (python3.6) 中的 Dataframe。

我按照下面的代码进行设置,

df = DataFrame({'list1': list1, 'list2': list2, 'list3': list3, 'list4': list4, 'list5': list5, 'list6': list6})

它会给出类似ValueError: arrays must all be same length的错误

所以我检查了数组的所有长度,list1 & list2 比其他列表多 1 个数据。如果我想使用pd.resample将1个数据添加到其他4个列表(list3list4list5list6),那么我应该如何编写代码......?

此外,这些列表是 1 分钟的时间序列列表。

这里有人有想法或帮助我吗?

提前致谢。

编辑 所以我改变了 EdChum 所说的。 并在前面添加了时间表。如下所示。

2017-04-01 0:00 895.87  730 12.8    4   19.1    380
2017-04-01 0:01 894.4   730 12.8    4   19.1    380
2017-04-01 0:02 893.08  730 12.8    4   19.3    380
2017-04-01 0:03 890.41  730 12.8    4   19.7    380
2017-04-01 0:04 889.28  730 12.8    4   19.93   380

然后我输入了类似的代码

df.resample('1min', how='mean', fill_method='pad')

它给了我这个错误:TypeError: Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'RangeIndex'

【问题讨论】:

    标签: python-3.x pandas dataframe resampling


    【解决方案1】:

    我只是为每个列表构建一个@ 987654322,然后concat它们全部:

    In [38]:
    l1 = list('abc')
    l2 = [1,2,3,4]
    s1 = pd.Series(l1, name='list1')
    s2 = pd.Series(l2, name='list2')
    df = pd.concat([s1,s2], axis=1)
    df
    
    Out[38]: 
      list1  list2
    0     a      1
    1     b      2
    2     c      3
    3   NaN      4
    

    正如您可以通过Series 987654326 @ CTOR它将名称DF中的每列,加上它将放置NaN列长度不匹配

    resample是指当您有一个DatetimeIndex for DatetimeIndex您要重新组合或根据您想要的某个时间段根据您想要的时间来调整长度。你想reindex 我认为这是不必要和混乱的:

    In [40]:
    l1 = list('abc')
    l2 = [1,2,3,4]
    s1 = pd.Series(l1)
    s2 = pd.Series(l2)
    df = pd.DataFrame({'list1':s1.reindex(s2.index), 'list2':s2})
    df
    
    Out[40]: 
      list1  list2
    0     a      1
    1     b      2
    2     c      3
    3   NaN      4
    

    在这里你需要知道最长的长度,然后reindex所有使用该索引的系列,如果你只是concat,它会自动调整长度并用NaN填充缺失的元素

    【讨论】:

      【解决方案2】:

      根据this documentation,用pd.resample() 来做这件事看起来很困难:你应该计算一个频率,它只给你的df添加一个值,这个函数似乎真的不适合这个^^(似乎允许轻松重塑,例如:1 分钟到 30 秒或 1 小时)!你最好试试 EdChum 的做法:P

      【讨论】:

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