web-dev-qa-db-ja.com

ValueError:配列はすべて同じ長さである必要がありますpython using pandas DataFrame

私は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のようなエラーが発生します

そこで、配列の長さをすべてチェックしたところ、list1list2には他のリストよりも1つ多いデータがあります。 list3を使用して他の4つのリスト(list4list5list6pd.resample)に1つのデータを追加する場合、どのように記述すればよいですかコード...?

また、それらのリストは1分の時系列リストです。

誰かがここで私を助けてくれるアイデアを持っていますか?

前もって感謝します。

[〜#〜] edit [〜#〜]それで、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'

4
paulc1111

リストごとにSeriesを作成してから、 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

namectorにSeries argを渡すことができるため、df内の各列に名前が付けられ、さらに列の長さが一致しない場所にNaNが配置されます。

resampleは、ここで必要な期間とは異なる期間に基づいて長さをリベースまたは調整する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で埋められます。

3
EdChum

このドキュメント によると、pd.resample()でこれを行うのは非常に難しいようです:dfに1つの値のみを追加する周波数を計算する必要があり、関数は実際には作成されていないようですこれ^^(簡単な再形成を可能にするようです、例:1分から30秒または1時間)! EdChumがやったことを試してみたほうがいいです:P

0
Doe Jowns