如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)) df_tmp a cnt fomat1 format2 fomat1-1 format2-2 data1 100 data1100 100data1 data1100 100data1 data2 200 data2200 200data2 data2200 200data2
以上为个人经验,希望能给大家一个参考,也希望大家多多支持免费资源网。如有错误或未考虑完全的地方,望不吝赐教。
© 版权声明
THE END
暂无评论内容