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
的新列,其中包含值0if(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()