python – 使用值和列表向MultiIndex pandas DataFrame添加新行
发布时间:2020-12-20 11:53:46 所属栏目:Python 来源:网络整理
导读:我有一个MultiIndex DataFrame: predicted_y actual_y predicted_full actual_fullsubj_id org_clip 123 3 2 5 [1,2,3] [4,5,6] 我希望添加一个新行: predicted_y actual_y predicted_full actual_fullsubj_id org_clip 123 3 2 5 [1,3] [4,6]321 4 20 50
我有一个MultiIndex DataFrame:
predicted_y actual_y predicted_full actual_full subj_id org_clip 123 3 2 5 [1,2,3] [4,5,6] 我希望添加一个新行: predicted_y actual_y predicted_full actual_full subj_id org_clip 123 3 2 5 [1,3] [4,6] 321 4 20 50 [10,20,30] [40,50,60] # add this row 以下代码执行此操作: df.loc[('321',4),['predicted_y','actual_y']] = [20,50] df.loc[('321',['predicted_full','actual_full']] = [[10,30],[40,60]] 但是当我尝试在一行中添加一个新行时,我收到一个错误: df.loc[('321','actual_y','predicted_full','actual_full']] = [20,[10,60]] >>> ValueError: setting an array element with a sequence. 笔记: 我相信它有一些东西(可能是语法)与我一起尝试添加一个包含值和列表的行.所有其他尝试都引发了同样的错误;请参阅以下示例: df.loc[('321','actual_full']]] = [20,60]] df.loc[('321',['predicted_full'],['actual_full']]] = [20,[['predicted_full'],['actual_full']]]] = [20,np.array([10,30]),np.array([40,60])] 构造初始DataFrame的代码: df = pd.DataFrame(index=pd.MultiIndex(levels=[[],[]],labels=[[],names=['subj_id','org_clip']),columns=['predicted_y','actual_full']) df.loc[('123',3),'actual_y']] = [2,5] df.loc[('123','actual_full']] = [[1,3],[4,6]] 解决方法
使至少一个子列表成为dtype对象的数组:
In [27]: df.loc[('321','actual_full']] = ( [20,np.array((10,30),dtype='O'),60]]) In [28]: df Out[28]: predicted_y actual_y predicted_full actual_full subj_id org_clip 123 3 2 5 [1,60] 请注意错误 ValueError: setting an array element with a sequence. 发生在这一行: --> 643 arr_value = np.array(value) 并且可以像这样再现 In [12]: np.array([20,60]]) --------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-12-f6122275ab9f> in <module>() ----> 1 np.array([20,60]]) ValueError: setting an array element with a sequence. 但是如果其中一个子列表是dtype对象的数组,则结果是dtype对象的数组: In [16]: np.array((20,(40,60))) Out[16]: array([20,array([10,dtype=object),60)],dtype=object) 因此可以避免ValueError. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |