cannot set a row with mismatched columns

错误:cannot set a row with mismatched columns

错误背景

在希望将dataframe a 中的特定移至dataframe b 时出错,记录下自己使用的方法

原错误情况

#dataframe a 已知
a={'ab':[1,2,3],'bb':[3,4,5],'cb':[4,5,6]}
a = pd.DataFrame(a)
print(a)

#dataframe b 是一个空df,希望把a中的特定行放至b
b = pd.DataFrame(columns=a.columns)
#根据网上的方法
size = b.index.size     #获取当前空df的索引值,每找到一个特定行就依次添加,这里只添加一行作为示例
print(a.loc[a['cb']==5]) #查找特定行 没有问题
b.loc[size] = a.loc[a['cb']==5] #出错 cannot set a row with mismatched columns

错误原因

采用a.loc[条件]的方法查找到的特定行是DataFrame的格式,而b.loc[size],size直接指定了索引,这样查找行的话得到的是df中某一行的值,如:

print(a.loc[a['cb']==5]) 
print(a.loc[1])#依然是上面的例子中的数据

运行结果:
在这里插入图片描述
所以

b.loc[size] = a.loc[a['cb']==5]

这个等式两边是不匹配的。因此要解决这个报错,解决方法就是等式右边,查找a中特定行时,采取先获取索引,再查找的方式

解决方法

a={'ab':[1,2,3],'bb':[3,4,5],'cb':[4,5,6]}
a = pd.DataFrame(a)
print(a)
b = pd.DataFrame(columns=a.columns)
size = b.index.size

index = a.loc[a['cb']==5].index.tolist()[0]   #获取a中特定行的索引
print(a.loc[1])
b.loc[size] = a.loc[index]  #两边格式一样
print(b)  #成功!

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值