python 使用pandas同时对多列进行赋值
如dataframe
data1['月份']=int(month)#加入月份和企业名称 data1['企业']=parmentname
可以增加单列,并赋值,如果想同时对多列进行赋值
data1['月份','企业']=int(month),parmentname#加入月份和企业名称
会出错
ValueError:Lengthofvaluesdoesnotmatchlengthofindex
data[['合计','平均']]='数据','月份'
类似这样的,也无效
KeyError:“Noneof[Index([‘合计',‘平均'],dtype=‘object')]areinthe[columns]”
只有下例中:
importpandasaspd chengji=[[100,95,100,99],[90,98,99,100],[88,95,98,88],[99,98,97,87],[96.5,90,96,85],[94,94,93,91],[91,99,92,87],[85,88,85,90],[90,92,99,88],[90,88,89,81],[85,89,89,82],[95,87,86,88],[90,97,97,98],[80,92,89,98],[80,98,85,81],[98,88,95,92]] data=pd.DataFrame(chengji,columns=['语文','英语','数学','政治']) print(data) #data1=data[['数学','语文','英语','政治']]#排序 #data1=data1.reset_index(drop=True)#序列重建 #data1.index.names=['序号']#序列重命名 #data1.index=data1.index+1#序列从1开始 #print(data1) data=pd.DataFrame(chengji,columns=['语文','英语','数学','政治'],index=[iforiinrange(1,len(chengji)+1)]) print(data) data[['合计','平均']]=data.apply(lambdax:(x.sum(),x.sum()/4),axis=1,result_type='expand') print(data[:]) data=pd.DataFrame(chengji,columns=['语文','英语','数学','政治'],index=[iforiinrange(1,len(chengji)+1)]) print(data) data[['合计','平均']]=data.apply(lambdax:('数据','月份'),axis=1,result_type='expand') print(data[:])
应用apply并设置result_type=‘expand'参数才可以。
先前的例子,用如下的方法就行了
data1[['月份','企业']]=data1.apply(lambdax:(int(month),parmentname),axis=1,result_type='expand') #data1['月份']=int(month)#加入月份和企业名称 #data1['企业']=parmentname #print(data1)
后记:
如果'月份','企业'列存在,用如下也可,上例中,直接可以创建不存在的列。
data1.lco[:,['月份','企业']]=int(month),parmentname
或
data1[['月份','企业']]=int(month),parmentname
今天又遇到一个从某列截取字符串长度写到另一列的,也一并写到这里:
货品列在原表中无,取货品代码的前12位。
totaldata=totaldata.reset_index(drop=False) totaldata['货品']=totaldata['货品代码'].apply(lambdax:x[:12])
后记:2020.5.17又遇到想新增两列并赋值的问题
importnumpyasnp importpandasaspd frompandasimportSeries chengji=[['N',95,0],['N',100,88],['N',88,100],['N',66,0]] data=pd.DataFrame(chengji,columns=['p','x','g']) data[['序号','列名']]=data[['p','x']]#pd.DataFrame(data[['p','x']])#.apply(lambdax:x) print(data)
补充:pandas的apply返回多列,并赋值
代码如下:
importpandasaspd df_tmp=pd.DataFrame([ {"a":"data1","cnt":100},{"a":"data2","cnt":200}, ]) df_tmp acnt data1100 data2200
方法一:使用apply的参数result_type来处理
defformatrow(row): a=row["a"]+str(row["cnt"]) b=str(row["cnt"])+row["a"] returna,b df_tmp[["fomat1","format2"]]=df_tmp.apply(formatrow,axis=1,result_type="expand") df_tmp acntfomat1format2 data1100data1100100data1 data2200data2200200data2
方法二:使用zip打包返回结果来处理
df_tmp["fomat1-1"],df_tmp["format2-2"]=zip(*df_tmp.apply(formatrow,axis=1)) df_tmp acntfomat1format2fomat1-1format2-2 data1100data1100100data1data1100100data1 data2200data2200200data2data2200200data2
以上为个人经验,希望能给大家一个参考,也希望大家多多支持毛票票。如有错误或未考虑完全的地方,望不吝赐教。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。