pandas删除行删除列增加行增加列的实现


Posted in Python onJuly 06, 2019

创建df:

>>> df = pd.DataFrame(np.arange(16).reshape(4, 4), columns=list('ABCD'), index=list('1234'))

>>> df

  A  B  C  D

1  0  1  2  3

2  4  5  6  7

3  8  9 10 11

4 12 13 14 15

1,删除行

1.1,drop

通过行名称删除:

df = df.drop(['1', '2'])      # 不指定axis默认为0

df.drop(['1', '3'], inplace=True)

通过行号删除:

df.drop(df.index[0], inplace=True)    # 删除第1行
df.drop(df.index[0:3], inplace=True)   # 删除前3行
df.drop(df.index[[0, 2]], inplace=True) # 删除第1第3行

1.2,通过各种筛选方法实现删除行

详见pandas“选择行单元格,选择行列“的笔记

举例,通过筛选可以实现很多功能,例如要对某行数据去重,可以获取去重后的index列表后,使用loc方法:

>>> df.loc['2','B']=9

>>> df

  A  B  C  D

1  0  1  2  3

2  4  9  6  7

3  8  9 10 11

4 12 13 14 15

>>> chooses = df['B'].drop_duplicates().index

>>> df.loc[chooses]

  A  B  C  D

1  0  1  2  3

2  4  9  6  7

4 12 13 14 15

2,删除列

2.1,del

del df['A'] # 删除A列,会就地修改

2.2,drop

通过列名称删除:

df = df.drop(['B', 'C'], axis=1)        # drop不会就地修改,创建副本返回

df.drop(['B', 'C'], axis=1, inplace=True)   # inplace=True会就地修改

使用列数删除,传入参数是int,列表,者切片: 

df.drop(df.columns[0], axis=1, inplace=True)    # 删除第1列

df.drop(df.columns[0:3], axis=1, inplace=True)   # 删除前3列

df.drop(df.columns[[0, 2]], axis=1, inplace=True) # 删除第1第3列

2.3,通过各种筛选方法实现删除列

详见pandas“选择行单元格,选择行列“的笔记

3,增加行

3.1,loc,at,set_value

想增加一行,行名称为‘5',内容为[16, 17, 18, 19]

df.loc['5'] = [16, 17, 18, 19]  # 后面的序列是Iterable就行

df.at['5'] = [16, 17, 18, 19]

df.set_value('5', df.columns, [16, 17, 18, 19], takeable=False)  # warning,set_value会被取消

3.2,append

添加有name的Series:

s = pd.Series([16, 17, 18, 19], index=df.columns, name='5')

df = df.append(s)

添加没有name的Series,必须ignore_index:

s = pd.Series([16, 17, 18, 19], index=df.columns)

df = df.append(s, ignore_index=True) 

可以 append字典列表,同样需要必须ignore_index:

ls = [{'A': 16, 'B': 17, 'C': 18, 'D': 19}, {'A': 20, 'B': 21, 'C': 22, 'D': 23}]

df = df.append(ls, ignore_index=True)

3.3,逐行增加

简单的逐行添加内容,可以:

df.loc[len(df)] = [16, 17, 18, 19]

但需要注意:len(df)生成的是int,如果生成的int,df已经存在了,会覆盖该行数据,而不会新增

3.4,插入行

增加行没找到类似insert这种可以插入的方法,暂时替代方法可以先reindex,再赋值: 

df = df.reindex(index=df.index.insert(2, '5'))

df.loc['5'] = [16, 17, 18, 19]

4,df增加列

一般涉及到增加列项时,经常会对现有的数据进行遍历运算,获得新增列项的值,所以这里结合对DataFrame的遍历讨论增加列。

例如,想增加一列'E',值等于'A'和'C'列对应值之和。

4.1,遍历DataFrame获取序列的方法

s = [a + c for a, c in zip(df['A'], df['C'])]     # 通过遍历获取序列

s = [row['A'] + row['C'] for i, row in df.iterrows()] # 通过iterrows()获取序列,s为list

s = df.apply(lambda row: row['A'] + row['C'], axis=1) # 通过apply获取序列,s为Series

s = df['A'] + df['C']                 # 通过Series矢量相加获取序列

s = df['A'].values + df['C'].values          # 通过Numpy矢量相加获取序列

4.2,[ ],loc

通过df[]或者df.loc添加序列

df.loc[:, 'E'] = s

df['E'] = s

4.3,Insert

可以指定插入位置,和插入列名称

df.insert(0, 'E', s)

4.4,concat

s = pd.Series([16, 17, 18, 19], name='E', index=df.index)
df = pd.concat([df, s], axis=1)

4.5,iloc和loc遍历过程中给列赋值

效率比较低

df['E']是DataFrame的一个Series,是引用,对其修改也能改变DataFrame,但运行时报了Warning

df['E'] = None # 需事先创建e列,否则iloc遍历会报错,loc遍历无需事先创建

for i in range(len(df)):

  df['E'].iloc[i] = df['A'].iloc[i] + df['C'].iloc[i] 

# SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame

不用Series不会报Warning:

df['E'] = None

col_no = [i for i in df.columns].index('E') 

for i in range(len(df)):

  df.iloc[i, col_no] = df['A'].iloc[i] + df['C'].iloc[i]

用loc无需先给E列赋空值:

for i in df.index:

  df.loc[i, 'E'] = df.loc[i, 'A'] + df.loc[i, 'C']

4.6,逐列增加

简单的逐列添加内容,可以:

df[len(df)] = [16, 17, 18, 19]

但需要注意:len(df)生成的是int,如果生成的int,df已经存在了,会覆盖该列数据,而不会新增

4.7,其他方法

增加3列,EFG,value默认为np.NaN

df = pd.concat([df, pd.DataFrame(columns=list('EFG'))])  # 列的次序无法指定,并且fillna时会对整个df做出调整

df = df.reindex(columns=list('ABCDEFG'), fill_value=0)  # 列的次序按照list指定,并且fill_value只对新增列做出调整,推荐!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python序列之list和tuple常用方法以及注意事项
Jan 09 Python
使用Python实现下载网易云音乐的高清MV
Mar 16 Python
深入理解Python对Json的解析
Feb 14 Python
python中文件变化监控示例(watchdog)
Oct 16 Python
Python利用multiprocessing实现最简单的分布式作业调度系统实例
Nov 14 Python
浅谈Python2获取中文文件名的编码问题
Jan 09 Python
Django 实现admin后台显示图片缩略图的例子
Jul 28 Python
利用python list完成最简单的DB连接池方法
Aug 09 Python
在pycharm中关掉ipython console/PyDev操作
Jun 09 Python
给Django Admin添加验证码和多次登录尝试限制的实现
Jul 26 Python
python 爬取免费简历模板网站的示例
Sep 27 Python
深度学习小工程练习之垃圾分类详解
Apr 14 Python
Python使用Pandas库实现MySQL数据库的读写
Jul 06 #Python
python 实现的发送邮件模板【普通邮件、带附件、带图片邮件】
Jul 06 #Python
Python 微信爬虫完整实例【单线程与多线程】
Jul 06 #Python
python实现爬取百度图片的方法示例
Jul 06 #Python
python实现控制电脑鼠标和键盘,登录QQ的方法示例
Jul 06 #Python
python3 打印输出字典中特定的某个key的方法示例
Jul 06 #Python
python使用 zip 同时迭代多个序列示例
Jul 06 #Python
You might like
php查询相似度最高的字符串的方法
2015/03/12 PHP
php通过文件流方式复制文件的方法
2015/03/13 PHP
html下载本地
2006/06/19 Javascript
限制复选框的最大可选数
2006/07/01 Javascript
Mootools 1.2教程 滚动条(Slider)
2009/09/15 Javascript
JavaScript Event学习第二章 Event浏览器兼容性
2010/02/07 Javascript
angularjs实现与服务器交互分享
2014/06/24 Javascript
JavaScript通过Date-Mask将日期转换成字符串的方法
2015/06/04 Javascript
基于JavaScript代码实现pc与手机之间的跳转
2015/12/23 Javascript
JavaScript代码实现图片循环滚动效果
2020/03/19 Javascript
javascript 定时器工作原理分析
2016/12/03 Javascript
如何优雅地在vue中添加权限控制示例详解
2019/03/07 Javascript
vue添加锚点,实现滚动页面时锚点添加相应的class操作
2020/08/10 Javascript
[01:35]辉夜杯战队访谈宣传片—iG.V
2015/12/25 DOTA
[58:25]VP vs RNG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python解析发往本机的数据包示例 (解析数据包)
2014/01/16 Python
分析用Python脚本关闭文件操作的机制
2015/06/28 Python
Python实现XML文件解析的示例代码
2018/02/05 Python
Python cookbook(数据结构与算法)通过公共键对字典列表排序算法示例
2018/03/15 Python
pygame实现俄罗斯方块游戏(对战篇1)
2019/10/29 Python
python实现横向拼接图片
2020/03/23 Python
python3.4中清屏的处理方法
2020/07/06 Python
python如何运行js语句
2020/09/09 Python
Python基于locals返回作用域字典
2020/10/17 Python
css3给背景图片加颜色遮罩的方法
2019/11/05 HTML / CSS
阿提哈德航空官方网站:Etihad Airways
2017/01/06 全球购物
迪奥美国官网:Dior美国
2019/12/07 全球购物
经典c++面试题四
2015/05/14 面试题
环境工程大学生自荐信
2013/10/21 职场文书
自我反省检讨书
2014/01/23 职场文书
军训感想500字
2014/02/20 职场文书
《油菜花开了》教学反思
2014/02/22 职场文书
2014年两会学习心得体会
2014/03/10 职场文书
大学生通用个人自我评价
2014/04/27 职场文书
纪念九一八事变演讲稿:牢记历史,捍卫主权
2014/09/14 职场文书
教代会开幕词
2015/01/28 职场文书