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))
df_tmp
a cnt fomat1 format2 fomat1-1 format2-2
data1 100 data1100 100data1 data1100 100data1
data2 200 data2200 200data2 data2200 200data2

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

(0)

相关推荐

  • Python3 pandas.concat的用法说明

    前面给大家分享了pandas.merge用法详解,这节分享pandas数据合并处理的姊妹篇,pandas.concat用法详解,参考利用Python进行数据分析与pandas官网进行整理. pandas.merge参数列表如下图,其中只有objs是必须得参数,另外常用参数包括objs.axis.join.keys.ignore_index. 1.pd.concat([df1,df2,df3]), 默认axis=0,在0轴上合并. 2.pd.concat([df1,df4],axis=1)–在1轴

  • 聊聊Python pandas 中loc函数的使用,及跟iloc的区别说明

    loc和iloc的意思 首先,loc是location的意思,和iloc中i的意思是指integer,所以它只接受整数作为参数,详情见下面. loc和iloc的区别及用法展示 1.区别 loc works on labels in the index. iloc works on the positions in the index (so it only takes integers). 2.用法展示 首先创建一个dataframe: 1)loc为Selection by Label函数,即为

  • python之 matplotlib和pandas绘图教程

    不得不说使用python库matplotlib绘图确实比较丑,但使用起来还算是比较方便,做自己的小小研究可以使用.这里记录一些统计作图方法,包括pandas作图和plt作图. 前提是先导入第三方库吧 import pandas as pd import matplotlib.pyplot as plt import numpy as np 然后以下这两句用于正常显示中文标签什么的. plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签

  • python pandas模糊匹配 读取Excel后 获取指定指标的操作

    1.首先读取Excel文件 数据代表了各个城市店铺的装修和配置费用,要统计出装修和配置项的总费用并进行加和计算: 2.pandas实现过程 import pandas as pd #1.读取数据 df = pd.read_excel(r'./data/pfee.xlsx') print(df) cols = list(df.columns) print(cols) #2.获取含有装修 和 配置 字段的数据 zx_lists=[] pz_lists=[] for name in cols: if

  • Python pandas轴旋转stack和unstack的使用说明

    摘要 前面给大家分享了pandas做数据合并的两篇[pandas.merge]和[pandas.cancat]的用法.今天这篇主要讲的是pandas的DataFrame的轴旋转操作,stack和unstack的用法. 首先,要知道以下五点: 1.stack:将数据的列"旋转"为行 2.unstack:将数据的行"旋转"为列 3.stack和unstack默认操作为最内层 4.stack和unstack默认旋转轴的级别将会成果结果中的最低级别(最内层) 5.stack

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

    如dataframe data1['月份']=int(month) #加入月份和企业名称 data1['企业']=parmentname 可以增加单列,并赋值,如果想同时对多列进行赋值 data1['月份','企业']=int(month) , parmentname #加入月份和企业名称 会出错 ValueError: Length of values does not match length of index data[['合计','平均']]='数据','月份' 类似这样的,也无效 Ke

  • python中pandas.DataFrame对行与列求和及添加新行与列示例

    本文介绍的是python中pandas.DataFrame对行与列求和及添加新行与列的相关资料,下面话不多说,来看看详细的介绍吧. 方法如下: 导入模块: from pandas import DataFrame import pandas as pd import numpy as np 生成DataFrame数据 df = DataFrame(np.random.randn(4, 5), columns=['A', 'B', 'C', 'D', 'E']) DataFrame数据预览: A

  • Python中pandas dataframe删除一行或一列:drop函数详解

    用法:DataFrame.drop(labels=None,axis=0, index=None, columns=None, inplace=False) 在这里默认:axis=0,指删除index,因此删除columns时要指定axis=1: inplace=False,默认该删除操作不改变原数据,而是返回一个执行删除操作后的新dataframe: inplace=True,则会直接在原数据上进行删除操作,删除后就回不来了. 例子: >>>df = pd.DataFrame(np.a

  • python pandas 如何替换某列的一个值

    摘要:本文主要是讲解怎么样替换某一列的一个值. 应用场景: 假如我们有以下的数据集: 我们想把里面不是pre的字符串全部换成Nonpre,我们要怎么做呢? 做法很简单. df['col2']=df['col1'] df.loc[df['col1'] !=' pre','col2']=Nonpre 以上这篇python pandas 如何替换某列的一个值就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • python中pandas库中DataFrame对行和列的操作使用方法示例

    用pandas中的DataFrame时选取行或列: import numpy as np import pandas as pd from pandas import Sereis, DataFrame ser = Series(np.arange(3.)) data = DataFrame(np.arange(16).reshape(4,4),index=list('abcd'),columns=list('wxyz')) data['w'] #选择表格中的'w'列,使用类字典属性,返回的是S

  • Python Pandas list列表数据列拆分成多行的方法实现

    1.实现的效果 示例代码: df=pd.DataFrame({'A':[1,2],'B':[[1,2],[1,2]]}) df Out[458]: A B 0 1 [1, 2] 1 2 [1, 2] 拆分成多行的效果: A  B 0  1  1 1  1  2 3  2  1 4  2  2 2.拆分成多行的方法 1)通过apply和pd.Series实现 容易理解,但在性能方面不推荐. df.set_index('A').B.apply(pd.Series).stack().reset_ind

  • python中pandas对多列进行分组统计的实现

    使用groupby([ ]).size()统计的结果,值相同的字段值会不显示 如上图所示,第一个空着的行是982499 7 3388 1,因为此行与前面一行的这两个字段值是一样的,所以不显示.第二个空着的行是390192 22 4278 1,因为此行与前面一行的第一个字段值是一样的,所以不显示.这样的展示方式更直观,但对于刚用的人,可能会让其以为是缺失值. 如果还不明白可以看下面的全部数据及操作. import pandas as pd res6 = pd.read_csv('test.csv'

  • ​python中pandas读取csv文件​时如何省去csv.reader()操作指定列步骤

    优点: 方便,有专门支持读取csv文件的pd.read_csv()函数. 将csv转换成二维列表形式 支持通过列名查找特定列. 相比csv库,事半功倍 1.读取csv文件 import pandas as pd   file="c:\data\test.csv" csvPD=pd.read_csv(file)   df = pd.read_csv('data.csv', encoding='gbk') #指定编码     read_csv()方法参数介绍 filepath_or_buf

  • Python pandas删除指定行/列数据的方法实例

    目录 1.滤除缺失数据dropna() 1)滤除含有NaN值的所有行 2)滤除含有NaN值的所有列 3)滤除元素都是NaN值的行 4)滤除元素都是NaN值的列 5)滤除指定列中含有缺失的行 2.删除重复值 drop_duplicates() 1)keep=“first” 2)keep=“last” 3)keep=False 4)删除指定列中重复项对应的行 3.根据指定条件删除行列drop() 1).删除指定列 2).删除指定行 总结 1.滤除缺失数据dropna() import pandas

  • python中pandas操作apply返回多列的实现

    目录 apply 返回多列 生成新列 多行操作举例 我们可以用DataFrame的apply函数实现对多列,多行的操作. 需要记住的是,参数axis设为1是对列进行操作,参数axis设为0是对行操作.默认是对行操作. apply 返回多列 # height = [70, 90, 100, 120, 140, 160, 180, 200,220,240, 260] # 长度为 11 # df.shape   (1000, 11) # 对df的每一行的每一个元素操作,然后再返回多列 #-------

随机推荐