加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读