• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

python 使用pandas同时对多列进行赋值

python 搞代码 4年前 (2022-01-07) 47次浏览 已收录 0个评论
文章目录[隐藏]

这篇文章主要介绍了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 pd 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=[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 np import pandas as pd from 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 pd df_tmp = pd.DataFrame([ {"a":"data1", "cnt":100},{"a":"data2", "cnt":200}, ]) df_tmp a cnt data1 100 data2 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_tmp a cnt fomat1 format2 data1 100 data1100 100data1 data2 200 data2200 200data2

方法二:使用zip打包返回结果来处理

 df_tmp["fomat1-1"], df_tmp["format2-2"] = zip(*df_tmp.apply(formatrow, axis=1<div style="color:transparent">来源gaodai^.ma#com搞#代!码网</div>)) df_tmp a cnt fomat1 format2 fomat1-1 format2-2 data1 100 data1100 100data1 data1100 100data1 data2 200 data2200 200data2 data2200 200data2

以上为个人经验,希望能给大家一个参考,也希望大家多多支持gaodaima搞代码网。如有错误或未考虑完全的地方,望不吝赐教。

以上就是python 使用pandas同时对多列进行赋值的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:python 使用pandas同时对多列进行赋值

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址