Python 如何克服';ValueError:传递的项目数错误2,放置意味着1';错误?

Python 如何克服';ValueError:传递的项目数错误2,放置意味着1';错误?,python,python-3.x,pandas,dataframe,pandas-groupby,Python,Python 3.x,Pandas,Dataframe,Pandas Groupby,我有一个时间序列df: Menge Dates Time month 19.5 2018-01-01 00:00:00 Jan 19.0 2018-01-01 00:15:00 Jan 19.5 2018-01-01 00:30:00 Jan 19.5 2018-01-01 00:45:00 Jan 21.0 2018-01-01 01:00:00

我有一个时间序列df:

    Menge     Dates      Time       month
    19.5    2018-01-01  00:00:00     Jan
    19.0    2018-01-01  00:15:00     Jan
    19.5    2018-01-01  00:30:00     Jan
    19.5    2018-01-01  00:45:00     Jan
    21.0    2018-01-01  01:00:00     Jan
    19.5    2018-01-01  01:15:00     Jan
    20.0    2018-01-01  01:30:00     Jan
    23.0    2018-01-01  01:45:00     Jan
    20.5    2018-01-01  02:00:00     Jan
    84.5    2018-01-02  02:00:00     Jan
    80.0    2018-01-02  02:15:00     Jan
    75.5    2018-01-02  02:30:00     Jan
    72.0    2018-01-02  02:45:00     Jan
    70.0    2018-01-02  03:00:00     Jan
    69.0    2018-01-02  03:15:00     Jan
    67.5    2018-01-02  03:30:00     Jan
    67.0    2018-01-02  03:45:00     Jan
    66.0    2018-01-02  04:00:00     Jan
    189.5   2018-02-06  07:00:00     Feb
    188.0   2018-02-06  07:15:00     Feb
    190.5   2018-02-06  07:30:00     Feb
    192.0   2018-02-06  07:45:00     Feb
    185.5   2018-02-06  08:00:00     Feb
    182.5   2018-02-06  08:15:00     Feb
    178.0   2018-02-06  08:30:00     Feb
    189.5   2018-02-06  08:45:00     Feb
    181.0   2018-02-06  09:00:00     Feb
    161.0   2018-02-06  21:00:00     Feb
    159.0   2018-02-06  21:15:00     Feb
    163.5   2018-02-06  21:30:00     Feb
    162.5   2018-02-06  21:45:00     Feb
    163.0   2018-02-06  22:00:00     Feb
    162.5   2018-02-06  22:15:00     Feb
    162.5   2018-02-06  22:30:00     Feb
    162.0   2018-02-06  22:45:00     Feb
    158.5   2018-02-06  23:00:00     Feb
我试图计算每小时、每天和每月的平均值

我已经做了:

data['month'] = [d.strftime('%b') for d in data.Dates]
要获取
month
列,请执行以下操作:

data_nan_dropped = data.dropna(axis = 0)
data_nan_dropped.Dates = pd.to_datetime(data_nan_dropped.Dates)
data_nan_dropped.Time = pd.to_datetime(data_nan_dropped.Time, format='%H:%M:%S')
hourly_mean = data_nan_dropped.groupby([data_nan_dropped.Dates, data_nan_dropped.Time.dt.hour]).mean()
monthly_mean = data_nan_dropped.groupby(data_nan_dropped.month).mean()
daily_mean = data_nan_dropped.groupby([data_nan_dropped.Dates]).mean()
这段代码工作得非常好,但我想将这些每小时、每月、每日平均值列添加到我的数据框
data\u nan\u drop
,为此,我尝试编辑上述代码,如下所示:

data_nan_dropped['hourly_mean'] = data_nan_dropped.groupby([data_nan_dropped.Dates, data_nan_dropped.Time.dt.hour]).transform('mean')
data_nan_dropped['monthly_mean'] = data_nan_dropped.groupby(data_nan_dropped.month).transform('mean')
data_nan_dropped['daily_mean'] = data_nan_dropped.groupby([data_nan_dropped.Dates]).transform('mean')
data\u nan\u drop['hourly\u mean']
工作得非常好,在我的数据框中创建了一个名为
hourly\u mean
的新列

但是对于
月平均值
日平均值
,我得到以下错误:

Traceback (most recent call last):

  File "<ipython-input-5-159d11ea8819>", line 1, in <module>
    data_nan_dropped['daily_mean'] = data_nan_dropped.groupby([data_nan_dropped.Dates]).transform('mean')

  File "C:\Users\kashy\Anaconda3\envs\py36\lib\site-packages\pandas\core\frame.py", line 3370, in __setitem__
    self._set_item(key, value)

  File "C:\Users\kashy\Anaconda3\envs\py36\lib\site-packages\pandas\core\frame.py", line 3446, in _set_item
    NDFrame._set_item(self, key, value)

  File "C:\Users\kashy\Anaconda3\envs\py36\lib\site-packages\pandas\core\generic.py", line 3172, in _set_item
    self._data.set(key, value)

  File "C:\Users\kashy\Anaconda3\envs\py36\lib\site-packages\pandas\core\internals\managers.py", line 1056, in set
    self.insert(len(self.items), item, value)

  File "C:\Users\kashy\Anaconda3\envs\py36\lib\site-packages\pandas\core\internals\managers.py", line 1158, in insert
    placement=slice(loc, loc + 1))

  File "C:\Users\kashy\Anaconda3\envs\py36\lib\site-packages\pandas\core\internals\blocks.py", line 3095, in make_block
    return klass(values, ndim=ndim, placement=placement)

  File "C:\Users\kashy\Anaconda3\envs\py36\lib\site-packages\pandas\core\internals\blocks.py", line 87, in __init__
    '{mgr}'.format(val=len(self.values), mgr=len(self.mgr_locs)))

ValueError: Wrong number of items passed 2, placement implies 1
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
数据删除['daily_mean']=数据删除.groupby([data_nan_Drop.Dates])。转换('mean'))
文件“C:\Users\kashy\Anaconda3\envs\py36\lib\site packages\pandas\core\frame.py”,第3370行,在uu setitem中__
自我设置项目(键、值)
文件“C:\Users\kashy\Anaconda3\envs\py36\lib\site packages\pandas\core\frame.py”,第3446行,在集合项中
NDFrame.\u设置\u项(自身、键、值)
文件“C:\Users\kashy\Anaconda3\envs\py36\lib\site packages\pandas\core\generic.py”,第3172行,在集合项中
self.\u数据集(键、值)
文件“C:\Users\kashy\Anaconda3\envs\py36\lib\site packages\pandas\core\internals\managers.py”,第1056行,在集合中
self.insert(len(self.items)、item、value)
文件“C:\Users\kashy\Anaconda3\envs\py36\lib\site packages\pandas\core\internals\managers.py”,第1158行,插入
位置=切片(loc,loc+1))
文件“C:\Users\kashy\Anaconda3\envs\py36\lib\site packages\pandas\core\internals\blocks.py”,第3095行,在make\u block中
返回klass(值,ndim=ndim,placement=placement)
文件“C:\Users\kashy\Anaconda3\envs\py36\lib\site packages\pandas\core\internals\blocks.py”,第87行,在uu init中__
“{mgr}.”格式(val=len(self.values),mgr=len(self.mgr_locs)))
ValueError:传递的项目数错误2,放置意味着1
为了克服这个错误,必须改变什么


谢谢

如果您的日期和时间列都是datetime64[ns],那么:

df = data.dropna(axis = 0)
df['Dates'] = pd.to_datetime(df['Dates'])
df['Time'] = pd.to_datetime(df['Time'])

df['month_mean'] = df.groupby(df['Dates'].dt.month).transform('mean')
df['hourbyday_mean'] =df.groupby([df['Dates'].dt.day, df['Time'].dt.hour]).transform('mean')
df['day_mean'] =df.groupby(df['Dates'].dt.day).transform('mean')

将为您提供三个新列及其各自的平均值。

这里的问题是您应该指出哪些列可以获得
平均值,这里我假设它是
Menge

data_nan_dropped['hourly_mean'] = data_nan_dropped.groupby([data_nan_dropped.Dates, data_nan_dropped.Time.dt.hour])['Menge'].transform('mean')

我又在玩代码了,下面的代码给出了正确的答案:

data_nan_dropped.Dates = pd.to_datetime(data_nan_dropped.Dates)
data_nan_dropped.Time = pd.to_datetime(data_nan_dropped.Time, format='%H:%M:%S')
data_nan_dropped['monthly_mean'] = data_nan_dropped.groupby(data_nan_dropped['month'])['Menge'].transform('mean')
data_nan_dropped['hourly_mean'] = data_nan_dropped.groupby([data_nan_dropped['Dates'], data_nan_dropped['Time'].dt.hour])['Menge'].transform('mean')
data_nan_dropped['daily_mean'] =data_nan_dropped.groupby(data_nan_dropped['Dates'])['Menge'].transform('mean')

我在上面添加了3行。将您的代码替换为
df=data.dropna(axis=0)
中的“我的代码”,以确保所有内容都相同。你的时间将是错误的格式,但你可以在完成所有转换后更改它。当我运行
df['time']
code时,它会给我以下错误:
TypeError:不能转换为datetime
嘿,当我这样做时,只有“monthly\u mean”给我正确的答案,但是每日的意思和每小时的意思给了我错误的答案