Python 为子结构添加新列:值的长度与索引的长度不匹配

Python 为子结构添加新列:值的长度与索引的长度不匹配,python,pandas,Python,Pandas,我有一个数据帧,它包含:时间戳,p\u ACT\u KW和p\u SOUSCR df2 = pd.read_csv('C:/Users/Demonstrator/Downloads/power.csv',delimiter=';') 首先,我放弃了遗漏的观察结果: df_no_missing = df2.dropna() 然后,我尝试添加一个名为depassement的新列,其中包含值0if(df2['p_-ACT\u-KW']-df2['p_-SOUSCR']) 2423

我有一个数据帧,它包含:
时间戳
p\u ACT\u KW
p\u SOUSCR

df2 = pd.read_csv('C:/Users/Demonstrator/Downloads/power.csv',delimiter=';')
首先,我放弃了遗漏的观察结果:

df_no_missing = df2.dropna()
然后,我尝试添加一个名为
depassement
的新列,其中包含值0
if(df2['p_-ACT\u-KW']-df2['p_-SOUSCR'])<0 else df2['p_-ACT\u-KW']-df2['p_-SOUSCR']

df_no_missing['depassement'] = np.where((df_no_missing['P_SOUSCR'] - df_no_missing['P_ACT_KW']) < 0), 0, df_no_missing['P_ACT_KW'] - df_no_missing['P_SOUSCR']
df_no_missing['depassement']=np.其中((df_no_missing['P_SOUSCR']-df_no_missing['P_ACT_KW'])<0),0,df_no_missing['P_ACT_KW']-df_no_missing['P_sousr']
但我得到了这个错误:

ValueError Traceback (most recent call last) in () ----> 1 df_no_missing['depassement'] = np.where((df_no_missing['P_SOUSCR'] - df_no_missing['P_ACT_KW']) 2357 self._set_item(key, value) 2358 2359 def _setitem_slice(self, key, value): C:\Users\Demonstrator\Anaconda3\lib\site-packages\pandas\core\frame.py in _set_item(self, key, value) 2421 2422 self._ensure_valid_index(value) -> 2423 value = self._sanitize_column(key, value) 2424 NDFrame._set_item(self, key, value) 2425 C:\Users\Demonstrator\Anaconda3\lib\site-packages\pandas\core\frame.py in _sanitize_column(self, key, value) 2576 2577 # turn me into an ndarray -> 2578 value = _sanitize_index(value, self.index, copy=False) 2579 if not isinstance(value, (np.ndarray, Index)): 2580 if isinstance(value, list) and len(value) > 0: C:\Users\Demonstrator\Anaconda3\lib\site-packages\pandas\core\series.py in _sanitize_index(data, index, copy) 2768 2769 if len(data) != len(index): -> 2770 raise ValueError('Length of values does not match length of ' 'index') 2771 2772 if isinstance(data, PeriodIndex): ValueError: Length of values does not match length of index 数值误差 回溯() ---->1 df_no_missing['depassement']=np.其中((df_no_missing['P_SOUSCR']-df_no_missing['P_ACT_KW'])2357 self.\u set_item(key,value)2358 2359 def_setitem_slice(self,key,value): C:\Users\Demonstrator\Anaconda3\lib\site packages\pandas\core\frame.py in\u set\u项(self、key、value)24212422 self.\u确保有效的\u索引(value) ->2423 value=self.\u清理列(键,值)2424 NDFrame.\u设置项(self,键,值)2425 C:\Users\Demonstrator\Anaconda3\lib\site packages\pandas\core\frame.py在_sanitize_column(self,key,value)2576 2577中#将我变成一个数组 ->2578值=_sanitize_索引(值,self.index,copy=False)2579如果不存在(值,(np.ndarray,index)):2580如果存在(值,列表)和len(值)>0: C:\Users\Demonstrator\Anaconda3\lib\site packages\pandas\core\series.py in_sanitize_index(数据、索引、副本)2768 2769如果len(数据)!=len(索引): ->2770提升值错误(“值的长度与“”索引的长度不匹配”)2771 2772如果存在(数据、周期索引): ValueError:值的长度与索引的长度不匹配
有什么办法可以解决这个问题吗?

您可以将参数
inplace=True
添加到
df2
中,以便就地删除
NaN
和正确的括号:

import pandas as pd
import numpy as np

df2 = pd.DataFrame({'P_SOUSCR':[10,2,1,np.nan],
                    'P_ACT_KW':[4,5,6,4]})

df2.dropna(inplace=True)
print (df2)
   P_ACT_KW  P_SOUSCR
0         4      10.0
1         5       2.0
2         6       1.0

df2['depassement'] = np.where((df2['P_SOUSCR'] - df2['P_ACT_KW']) < 0,
                               0, 
                               df2['P_ACT_KW'] - df2['P_SOUSCR'])
print (df2)
   P_ACT_KW  P_SOUSCR  depassement
0         4      10.0         -6.0
1         5       2.0          0.0
2         6       1.0          0.0

看起来需要
df_no_missing['depassement']=np。其中((df_no_missing['P_SOUSCR']-df_no_missing['P_ACT_KW'])<0,0,df_no_missing['P_SOUSCR'])
,添加了尾端括号,并删除了一个。@jezrael非常感谢,当我添加括号时,我收到了这个警告消息:“C:\Users\Demonstrator\Anaconda3\lib\site packages\ipykernel_main_u2;.py:1:SettingWithCopyWarning:试图在数据帧切片的副本上设置值。请尝试使用.loc[row\u indexer,col\u indexer]=value,而不是查看文档中的注意事项:如果name=='main':“当您有一条大型回溯邮件时,将其格式化为代码更易于阅读,因为引用会包装文本(以后也无法修复)。您可以将回溯邮件包装在
中发布吗?好的,非常感谢
df_no_missing = df2.dropna().copy()