值的长度与索引的长度不匹配

2024-10-01 17:31:26 发布

您现在位置:Python中文网/ 问答频道 /正文

向Stackoverflow社区问好

我试图读入一个.csv文件,其中包含1370行和两列:Time和{}。在

Time   Speed

0       1

1       4

2       7

3       8

我想找出两个时间步(例如Time2和{},即3)之间在{}之间的差异。我想添加一个新的列dS,其中包含先前计算的差异。数据现在看起来像:

^{pr2}$

我使用的代码如下:

import pandas as pd
from pandas import read_csv

df2 = pd.read_csv ('speed.csv')

dVV = []


for i, row in df2.iterrows():
    dVV.append(df2.iloc[i+1,1] -  df2.iloc[i,1])
    break

df2['dVV']=dVV

我得到的错误是:

ValueError                                Traceback (most recent call last)
<ipython-input-29-4ed9fde37ff9> in <module>()
     14     break
     15 
---> 16 df2['dVV']=dVV
     17 
     18 #df2.to_csv('udds_test.csv', index=False, header=True)

~\Anaconda3\lib\site-packages\pandas\core\frame.py in __setitem__(self, key, 
value)
   2517         else:
   2518             # set column
-> 2519             self._set_item(key, value)
   2520 
   2521     def _setitem_slice(self, key, value):

~\Anaconda3\lib\site-packages\pandas\core\frame.py in _set_item(self, key, 
value)
   2583 
   2584         self._ensure_valid_index(value)
-> 2585         value = self._sanitize_column(key, value)
   2586         NDFrame._set_item(self, key, value)
   2587 

~\Anaconda3\lib\site-packages\pandas\core\frame.py in _sanitize_column(self, key, value, broadcast)
   2758 
   2759             # turn me into an ndarray
-> 2760             value = _sanitize_index(value, self.index, copy=False)
   2761             if not isinstance(value, (np.ndarray, Index)):
   2762                 if isinstance(value, list) and len(value) > 0:

~\Anaconda3\lib\site-packages\pandas\core\series.py in _sanitize_index(data, 
index, copy)
   3119 
   3120     if len(data) != len(index):
-> 3121         raise ValueError('Length of values does not match length of ' 
'index')
   3122 
   3123     if isinstance(data, PeriodIndex):

ValueError: Length of values does not match length of index

我猜在最后1370行之后代码正在中断。我该如何应对?在


Tags: csvkeyinpycoreselfpandasindex
2条回答

您只需使用^{}

df['ds'] = df['Speed'].diff()

print(df)

   Time  Speed   ds
0     0      1  NaN
1     1      4  3.0
2     2      7  3.0
3     3      8  1.0

当矢量化解决方案(如pd.Series.diff)可用时,不建议使用您尝试的循环方法。在

使用:

df['Speed_avg'] = df['Speed'].rolling(2, min_periods=2).mean()
df['ds'] = df['Speed'].diff()

输出:

^{pr2}$

相关问题 更多 >

    热门问题