【python】dataframe取行列、添加行列汇总

本文详细介绍了Pandas库中DataFrame对象的选择和添加操作,包括使用点属性和类字典属性选取列,通过索引和切片选取行,以及利用loc和iloc进行精确选取。此外,还讲解了如何添加新行和新列,如使用loc插入行,通过赋值创建新列,以及append和concat方法。内容涵盖了数据操作的基础和进阶技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【取行列】

data是一个dataframe


data['w']  #选择表格中的'w'列,使用类字典属性,返回的是Series类型

data.w    #选择表格中的'w'列,使用点属性,返回的是Series类型

data[['w']]  #选择表格中的'w'列,返回的是DataFrame属性

data[['w','z']]  #选择表格中的'w'、'z'列

data[0:2]  #返回第1行到第2行的所有行,前闭后开,包括前不包括后

data[1:2]  #返回第2行,从0计,返回的是单行,通过有前后值的索引形式,
       #如果采用data[1]则报错

data.ix[1:2] #返回第2行的第三种方法,返回的是DataFrame,跟data[1:2]同

data['a':'b']  #利用index值进行切片,返回的是**前闭后闭**的DataFrame, 
        #即末端是包含的  
data.irow(0)   #取data的第一行
data.iloc[:, 0]   #取data的第一列

data.head()  #返回data的前几行数据,默认为前五行,需要前十行则dta.head(10)
data.tail()  #返回data的后几行数据,默认为后五行,需要后十行则data.tail(10)

ser.iget_value(0)  #选取ser序列中的第一个
ser.iget_value(-1) #选取ser序列中的最后一个,这种轴索引包含索引器的series不能采用ser[-1]去获取最后一个,这回引起歧义。

data.iloc[-1]   #选取DataFrame最后一行,返回的是Series
data.iloc[-1:]   #选取DataFrame最后一行,返回的是DataFrame
df.loc['a']   # 取‘a’行,返回类型是Series
df.loc[['a']]   # 取‘a’行,返回类型是DataFrame

data.loc['a',['w','x']]   #返回‘a’行'w'、'x'列,这种用于选取行索引列索引已知

data.iat[1,1]   #选取第二行第二列,用于已知行、列位置的选取。

【添加行列】

1、添加行

data.loc[0]=['cat', 3]   #在第0行插入cat行,值为3

data1.append(data2)   #直接append


data.concat
data.merge  #看场合

2、添加列

data['new column'] = [1,2,3,4]

insert方法不常用 

<think>嗯,用户的问题是关于使用Python的pandas库来创建透视表,对两数值进行求和,并且要添加总计行和。首先,我需要回忆一下pandas中透视表的相关函数,记得pivot_table是常用的函数。用户提到的总计行和,可能需要用到margins参数,对吧?因为之前学的pivot_table里有个margins参数,设置为True的话会添加总计,默认是行和都加。不过要确认一下语法是否正确。 然后,用户的需求是对两数值进行求和,所以应该指定values参数为这两,aggfunc设为'sum'。不过可能用户的数据结构是什么样的呢?假设用户的数据框中除了这两数值,还有其他的分类作为行和的索引。比如示例数据中的'类别'和'子类'作为行和,而'销售额'和'利润'是需要求和的两。 接下来,生成总计行和,需要确保在pivot_table函数中设置margins=True和margins_name='总计'。这样会在行和的末尾添加总计。同时,可能需要验证生成的透视表是否正确包含总计。比如示例中的df.pivot_table(index='类别', columns='子类', values=['销售额','利润'], aggfunc='sum', margins=True, margins_name='总计')。 另外,用户可能需要处理数据中的NaN值,因为如果某些组合没有数据,pivot_table会默认显示NaN,这时候可以用fill_value=0来替换为0,这样总计会更准确。比如示例代码中的fill_value=0。 然后,用户可能需要代码示例和解释。需要分步骤说明如何导入库、创建示例数据、应用pivot_table函数,并解释各个参数的作用。同时,要提醒用户注意数据类型是否正确,比如数值是否为数字类型,否则求和会出错。 另外,考虑到用户可能对pandas不熟悉,需要给出一个完整的例子,包括数据准备和结果输出,这样用户可以直接运行代码查看效果。例如,构造一个包含'类别'、'子类'、'销售额'、'利润'的数据框,然后应用透视表函数,并展示输出结果是否有总计行和。 可能还需要提到其他相关参数或方法,比如如果用户想自定义汇总函数,可以修改aggfunc参数,但这里用户只需要求和,所以用'sum'即可。此外,如果用户的数据需要多层索引或,pivot_table也支持,但当前需求可能比较简单,两数值直接作为values参数传入。 最后,要检查是否有引用相关的资料,比如站内引用中提到的pivot_table的使用,引用[1]、[3]、[4]都涉及到透视表的创建和统计,需要正确引用这些内容。确保回答中的步骤和代码符合这些引用中的方法,并且引用标识正确添加在相关段落末尾。 总结一下,回答的结构应该是先导入库,创建数据,使用pivot_table函数,设置参数包括index, columns, values, aggfunc, margins, fill_value,然后展示结果,并解释每个步骤的作用。同时,提醒用户注意数据清洗和类型,以及可能的错误情况,比如非数值数据无法求和。此外,提供相关的问题链接,帮助用户进一步学习。</think>### 分步解答 以下是使用 Python pandas 实现两数值透视表求和并添加总计行与的完整步骤: --- #### **1. 准备数据** 首先创建包含两数值(如`销售额`和`利润`)及分类字段(如`类别`和`子类`)的示例数据: ```python import pandas as pd data = { '类别': ['电子产品', '电子产品', '服装', '服装', '电子产品'], '子类': ['手机', '电脑', '上衣', '裤子', '手机'], '销售额': [5000, 8000, 300, 400, 2000], '利润': [1000, 2000, 50, 60, 400] } df = pd.DataFrame(data) ``` --- #### **2. 使用`pivot_table`生成透视表** 通过`pivot_table`函数指定: - `index`: 行分类字段(如`类别`) - `columns`: 分类字段(如`子类`) - `values`: 需要聚合的数值(如`['销售额', '利润']`) - `aggfunc`: 聚合函数(`sum`求和) - `margins`: 添加总计行/(`True`) - `margins_name`: 总计名称(`总计`) - `fill_value`: 缺失值填充为0 ```python pivot_df = df.pivot_table( index='类别', columns='子类', values=['销售额', '利润'], aggfunc='sum', margins=True, margins_name='总计', fill_value=0 ) ``` --- #### **3. 输出结果** ```python print(pivot_df) ``` 输出示例: ``` 销售额 利润 子类 手机 电脑 上衣 裤子 总计 手机 电脑 上衣 裤子 总计 类别 电子产品 7000 8000 0 0 15000 1400 2000 0 0 3400 服装 0 0 300 400 700 0 0 50 60 110 总计 7000 8000 300 400 15700 1400 2000 50 60 3510 ``` --- #### **4. 关键参数解释** - `margins=True`:自动添加行和的总计[^1] - `fill_value=0`:避免因数据缺失导致的`NaN`,使总计计算更准确[^3] - 多数值需用表传入`values`参数(如`['销售额', '利润']`)[^4] --- #### **5. 注意事项** - 确保数值为数字类型(可用`df.dtypes`检查) - 若需多层分类,可通过表传递多字段(如`index=['大类', '子类']`)[^2] - 自定义汇总函数时,可修改`aggfunc`参数(如`aggfunc={'销售额':'sum', '利润':'mean'}`) --- ### § 相关问题 § 1. 如何在透视表中同时计算平均值和最大值? 2. Pandas透视表与Excel透视表的主要区别是什么? 3. 如何对透视表结果进行样式美化(如高亮总计行)? [^1]: 引用[1] [^3]: 引用[3] [^4]: 引用[4]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值