python 如何用pandas同时对多列进行赋值
本篇内容主要讲解“python 如何用pandas同时对多列进行赋值”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python 如何用pandas同时对多列进行赋值”吧!
如dataframe
data1['月份']=int(month) #加入月份和企业名称 data1['企业']=parmentname
可以增加单列,并赋值,如果想同时对多列进行赋值
data1['月份','企业']=int(month) , parmentname #加入月份和企业名称
会出错
ValueError: Length of values does not match length of index
data[['合计','平均']]='数据','月份'
类似这样的,也无效
KeyError: “None of [Index([‘合计', ‘平均'], dtype=‘object')] are in the [columns]”
只有下例中:
import pandas as pdchengji=[[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=[i for i in range(1,len(chengji)+1)])print (data)data[['合计','平均']]=data.apply(lambda x: (x.sum(), x.sum()/4),axis=1,result_type='expand')print (data[:])data=pd.DataFrame(chengji,columns=['语文','英语','数学','政治'],index=[i for i in range(1,len(chengji)+1)])print (data)data[['合计','平均']]=data.apply(lambda x:('数据','月份'),axis=1,result_type='expand')print (data[:])
应用apply 并设置result_type=‘expand' 参数才可以。
先前的例子,用如下的方法就行了
data1[['月份','企业']]=data1.apply(lambda x:(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(lambda x:x[:12])
后记:2020.5.17又遇到想新增两列并赋值的问题
import numpy as npimport pandas as pdfrom pandas import Series 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(lambda x : x )print(data)
补充:pandas 的apply返回多列,并赋值
代码如下:
import pandas as pddf_tmp = pd.DataFrame([ {"a":"data1", "cnt":100},{"a":"data2", "cnt":200},])df_tmpa cntdata1 100data2 200
方法一:使用apply 的参数result_type 来处理
def formatrow(row): a = row["a"] + str(row["cnt"]) b = str(row["cnt"]) + row["a"] return a, b df_tmp[["fomat1", "format2"]] = df_tmp.apply(formatrow, axis=1, result_type="expand")df_tmpa cnt fomat1 format2data1 100 data1100 100data1data2 200 data2200 200data2
方法二:使用zip打包返回结果来处理
df_tmp["fomat1-1"], df_tmp["format2-2"] = zip(*df_tmp.apply(formatrow, axis=1))df_tmpa cnt fomat1 format2 fomat1-1 format2-2data1 100 data1100 100data1 data1100 100data1data2 200 data2200 200data2 data2200 200data2
到此,相信大家对“python 如何用pandas同时对多列进行赋值”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341