使用pandas库操作excel,csv表格操作大全

关注公众号“轻松学编程”了解更多,文末有公众号二维码,可以扫码关注哦。

前言

准备三份csv表格做演示:

成绩表.csv

subjects 小红 小强 小明 小兰 小刚
语文 65 76 90 80 90
数学 45 43 87 88 45
英语 99 86 86 80 86

成绩表1.csv

subjects 小红 小强 小明 小夏 小兰 小王 小刚 小亮
生物 78 67 78 89 77 76 98 100
地理 90 98 87 88 88 89 100 88
化学 87 78 86 98 86 76 87 87
化学 87 78 86 98 86 76 87 87
化学 87 78 86 98 86 76 87 87
地理 90 98 87 88 88 89 100 88

水果表.csv

color item price weeight
red apple 5.2 12
yellow banana 3.4 22
yellow orange 2.5 12
green banana 3.6 30
green orange 4.6 44
green apple 2 23

1、读取csv

# -*- coding: utf-8 -*-
import pandas as pd # 文件路径
file_name = r'C:\Users\ldc\Desktop\成绩表.csv'
# 由于文件中含有中文,所以使用gbk格式读取,其他常用的格式还有encoding='utf-8'
score_csv = pd.read_csv(file_name, encoding='gbk')

2、保存

# 文件名
file_new_name = r'C:\Users\ldc\Desktop\成绩表_新.csv'
# 写入csv,newline=''表示不添加空行
score_new = open(file_new_name, 'w', newline='')
# pd_score = pd.DataFrame([{'a': 1, 'b': 2}, {'a': 2, 'b': 5}]) # 将列表转换为DataFrame格式
# pd_score.to_csv(score_new, encoding='utf-8', index=False, line_terminator='\n')
score_csv.to_csv(score_new, encoding='utf-8', index=False, line_terminator='\n')

3、查看

3.1 查看文件行数与列数

print('1、文件内容\r\n', score_csv)
# 查看文件是几行几列,输出的是一个元祖(行数,列数)
print('2、文件行列', score_csv.shape)
# 查看文件有多少行
print('3、文件行数', len(score_csv)) # 方式一
print('4、文件行数', score_csv.shape[0]) # 方式二
# 查看文件有多少列
print('5、文件列数', score_csv.shape[1])

输出:

3.2 获取文件列名行号

# 获取列名
print('6、文件列名', list(score_csv.columns))
# print(score_csv.columns.to_list())
# 获取行号
print('7、文件行号', list(score_csv.index)) # 根据列名获取列号、下标
print('8、获取小明这一列的下标', score_csv.columns.get_loc('小明'))
# 根据列名获取内容
print('9、subjects内容\r\n', score_csv['subjects']) # 方式一
# print('subjects内容\r\n', score_csv.subjects) # 方式二
# print('转字典数据类型',dict(score_csv.subjects))

输出:

3.3 列转化成行索引

# 把列转化成索引,inplace=True会直接改变原来的行号
# score_csv.set_index('subjects', inplace=True)
# inplace=False则不改变原来的行号,这时把新的DataFrame付给一个新变量
score_csv_1 = score_csv.set_index('subjects', inplace=False) print('10、新的行号\r\n', score_csv_1) print('11、获取行号\r\n', list(score_csv_1.index))
# 根据[列][行]来获取值
print('12、[小明][数学]\r\n', score_csv_1['小明']['数学'])
print('原来行号\r\n', score_csv)

输出:

3.4 根据列号行号获取值

# 根据[列][行号]来获取值
print('13、[小明][0]来获取值\r\n', score_csv['小明'][0]) # 根据[列号][行号]来获取值
print('14、[第0列][第1行]来获取值\r\n', score_csv.iloc[0][1]) # 根据[行号][列号]来获取值
print('15、[第0行][第1列]来获取值\r\n', score_csv.loc[0][1]) # 行号都是从0开始,可以通过rename()来修改行号从1开始 score_csv_new_index = score_csv.rename(index={v: v + 1 for v in range(score_csv.shape[0])})
print('16、新的行号\r\n', score_csv_new_index)
print('17、[小明][1]', score_csv_new_index['小明'][1])

输出:

3.5 查看多列

# 获取多列
print('24、获取多列\r\n', score_csv[['小明', '小兰']])
# 从第2列取到最后一列
print('24、获取多列:从第2列取到最后一列\r\n', score_csv.iloc[:, 2:])
# 取第2列到第4列
print('24、获取多列:取第2列到第4列\r\n', score_csv.iloc[:, 2:5])

3.6 查看多行

# 获取多行
print('25、获取多行\r\n', score_csv.loc[[0, 1]])
# 从第一行取到最后一行
print('25、获取多行\r\n', score_csv.loc[1:]) # 取中间一部分
print('取中间一部分\r\n', score_csv.iloc[1:3, 2:4])

)]

4、倒置(转置)

# 转置(倒置),即行列转换
print('51、原数据\r\n', score_csv)
print('52、把csv行列互相转换\r\n', score_csv.T)

输出:

5、排序

5.1 列排序

# 列排序
# 对列索引进行重新排序
print('18、原数据\r\n', score_csv)
# by='列标签', axis=0 表示列轴,ascending=False表示降序,inplace=False表示返回一个新的数据
# 整体意思就是小兰这一列成绩按高到底排序,如果想按低到高则ascending=True即可
print('19、小兰这一列成绩按高到底排序\r\n', score_csv.sort_values(by='小兰', axis=0, ascending=False, inplace=False))

输出:

5.2 行排序

# 行排序
print('20、原数据\r\n', score_csv)
# 排序是按照数字来的,由于score_csv第一列不是数字,所以在排序时需要先把这一列删除
# 删除subjects列
score_csv_remove_subjects = score_csv.drop(['subjects'], axis=1)
# by=1,即第二行的值来升序排序,by=0表示第一行,因为行号是从0开始计算
print('21、按第二行升序排序\r\n', score_csv_remove_subjects.sort_values(by=1, axis=1, ascending=True))

输出:

5.3 行列排名

# 对数据进行排名处理,可以使用rank函数
print('22、显示每一行的排名\r\n', score_csv_remove_subjects.rank(axis=1, ascending=False, method='min'))
print('23、显示每一列的排名\r\n', score_csv_remove_subjects.rank(axis=0, ascending=False, method='min'))

6、分组

6.1 对列进行分组

# 读取水果价格表
fruit = pd.read_csv(r'C:\Users\ldc\Desktop\水果表.csv', encoding='utf-8')
print('26、水果价格表\r\n', fruit)
# 分组
# 查看水果有哪些种类,按item列分组
fruit_item = fruit.groupby(by='item')
print('27、查看水果种类:数量\r\n', dict(fruit_item.size()))

6.2 分组聚合操作

# 分组聚合操作之求均值
# 分组后的成员中可以被进行运算的值会进行运算,不能被运算的值不进行运算
# 比如求均值,只有数值型字段才能进行运算,而字符型字段不能进行运算,也不会进行运算。
print('28、分组后进行求均值\r\n', fruit_item.mean())
print('29、分组后进行求最大值\r\n', fruit_item.max())
print('30、分组后进行求最小值\r\n', fruit_item.min())

6.3 获取特定科目的均值

# 计算出苹果的平均价格
# 方式一:先对'item'分组,然后对'price'求均值,最后取'apple'的均值
print('32、获取苹果平均价格\r\n', fruit.groupby(by='item')['price'].mean()['apple'])
# 方式二:先对'item'分组,然后求均值,最后取'apple'中的'price'的均值
print('33、获取苹果平均价格\r\n', fruit.groupby(by='item').mean().loc['apple', 'price'])

6.4 把均价添加进表格

# 对分组后价格的均值添加进表中
# 方式一
mean_price = fruit.item.map(fruit.groupby(by='item')['price'].mean())
# print(mean_price)
fruit['mean_price'] = mean_price
print('35、把价格均价添加进表中\r\n', fruit)
# 方式二
fruit['mean_price'] = fruit.groupby('item')['price'].transform('mean')
print('37、把价格均价添加进表中\r\n', fruit)

6.5 对行进行分组

# 把subjects设置成行号
score_csv_1 = score_csv.set_index('subjects', inplace=False) # 对语文这一行进行分组,查看各个分数的人数
subjects_group = score_csv.groupby(score_csv_1.loc['语文'], axis=1, )
print('38、对语文分组\r\n', subjects_group.size())

7、修改

print('55、原数据\r\n', score_csv)
# 通过[行号,列名]修改数据
score_csv.loc[0, 'subjects'] = '化学'
print("56、修改[0, 'subjects']的值\r\n", score_csv)

8、新增

8.1 增加列

支持在最后一列增加、在特定位置增加一列、增加多列

# 新增一列
# 增加小亮的成绩,在最后一列后面添加
score_csv['小亮'] = [78, 90, 85]
print('39、在最后一面增加一列\r\n', score_csv)
# 在指定列号后面增加一列
score_csv.insert(loc=4, column='小夏', value=[90, 98, 99])
print('40、在第4列插入一列数据\r\n', score_csv)
score_csv.insert(loc=score_csv.columns.get_loc('小兰') + 1, column='小王', value=[67, 94, 65])
print('41、在小兰这一列后面插入一列数据\r\n', score_csv) # 新增多列
# 先获取列名
score_columns = score_csv.columns.to_list()
# 在指定位置增加新的列名,比如在小兰后面增加小玉、小华两列
add_index = score_columns[:score_columns.index('小兰') + 1] + ['小玉', '小华'] + score_columns[score_columns.index('小兰') + 1:]
# 按新列名重拍数据表,如果没有值就填充1
score_add_more_index = score_csv.reindex(columns=add_index, fill_value=1)
# 给新增的列增加数据,格式为[[小玉成绩1],[小华成绩1],[小玉成绩2],[小华成绩2],[小玉成绩3],[小华成绩3]],其中元素个数跟行数相等
score_add_more_index.loc[:, ('小玉', '小华')] = [[67, 78], [90, 78], [80, 90]] print('42、在小兰后面增加多列\r\n', score_add_more_index)

8.2 增加行

# 新增一行
score_csv.loc[3] = ['物理', 76, 54, 89, 95, 60, 98, 67, 89]
print('43、追加一行\r\n', score_csv) # 新增多行
subjects_new = [{'subjects': '历史', '小红': 89, '小强': 90, '小明': 87, '小夏': 97, '小兰': 76, '小王': 87, '小刚': 99, '小亮': 87},
{'subjects': '政治', '小红': 90, '小强': 97, '小明': 78, '小夏': 77, '小兰': 67, '小王': 87, '小刚': 89, '小亮': 76}
] score_csv_new = pd.concat([score_csv, pd.DataFrame(subjects_new)], ignore_index=True)
print('44、在后面增加多行\r\n', score_csv_new)
# 在第三行后面增加多行
score_csv_new_1 = pd.concat([score_csv.iloc[0:3], pd.DataFrame(subjects_new), score_csv.iloc[3:]], ignore_index=True)
print('45、在第三行后面增加多行\r\n', score_csv_new_1)

9、合并

支持把两个文件合并成一个文件

# csv合并
score_csv_other = pd.read_csv(r'C:\Users\ldc\Desktop\成绩表1.csv', encoding='gbk')
score_concat = pd.concat([score_csv, score_csv_other], ignore_index=True)
print('46、两个csv合并\r\n', score_concat)
print(score_csv_other)

10、删除

支持删除一列、多列、一行、多行数据

# 删除一列,inplace=False不改变原数据,inplace=True直接改变原数据,drop函数默认inplace=False
print('47、删除小明这一列\r\n', score_concat.drop(columns=['小明'], inplace=False))
# 删除多列
print('48、删除小明、小兰两列\r\n', score_concat.drop(columns=['小明', '小兰']))
# 删除一行 ,删除第二行,因为行号是从0开始的,所以是[1]
print('49、删除第二行\r\n', score_concat.drop(index=[1]))
# 删除多行
print('50、删除第一、二行\r\n', score_concat.drop(index=[0, 1]))

11、查重/去重

11.1 查看重复行

# 查看重复行
# 保留第一行重复值,返回如果有True,就说明有重复行,在True前面就是行号
print('53、查看重复行\r\n', score_csv_other.duplicated())
# 获取重复行索引
duplicated_indexs = score_csv_other.loc[score_csv_other.duplicated()].index
print('54、获取重复行索引\r\n', duplicated_indexs.to_list())

11.2 删除重复行

# 删除重复行
print(score_csv_other.drop_duplicates())

12、求和

行求和、列求和、行列汇总

# 行求和 行汇总
score_csv_other['行求和'] = score_csv_other.iloc[:, 1:].apply(lambda x: x.sum(), axis=1) print('54、行求和\r\n', score_csv_other) # 列求和 列汇总
score_csv_other.loc[score_csv_other.shape[0]] = score_csv_other.iloc[:, 1:].apply(lambda x: x.sum())
print('54、列求和\r\n', score_csv_other) score_csv_other.loc[score_csv_other.shape[0] - 1, 'subjects'] = '成绩总和'
print('行列汇总\r\n', score_csv_other)

后记

【后记】为了让大家能够轻松学编程,我创建了一个公众号【轻松学编程】,里面有让你快速学会编程的文章,当然也有一些干货提高你的编程水平,也有一些编程项目适合做一些课程设计等课题。

也可加我微信【1257309054】,拉你进群,大家一起交流学习。
如果文章对您有帮助,请我喝杯咖啡吧!

公众号

pandas神器操作excel表格大全(数据分析数据预处理)的更多相关文章

  1. 用Python的pandas框架操作Excel文件中的数据教程

    用Python的pandas框架操作Excel文件中的数据教程 本文的目的,是向您展示如何使用pandas 来执行一些常见的Excel任务.有些例子比较琐碎,但我觉得展示这些简单的东西与那些你可以在其 ...

  2. 利用 pandas库读取excel表格数据

    利用 pandas库读取excel表格数据 初入IT行业,愿与大家一起学习,共同进步,有问题请指出!! 还在为数据读取而头疼呢,请看下方简洁介绍: 数据来源为国家统计局网站下载: 具体方法 代码: i ...

  3. VS2010 C++ 操作Excel表格的编程实现

    转载请注明原文网址: http://www.cnblogs.com/xianyunhe/archive/2011/09/25/2190485.html 通过VC实现对Excel表格的操作的方法有多种, ...

  4. qt 操作excel表格

     自己编写的一个Qt C++类,用于操作excel表格,在Qt中操作excel需在.pro中增加CONFIG+=qaxcontainer配置. 1.打开Excel:objExcel = new QAx ...

  5. Python 利用Python操作excel表格之openyxl介绍Part2

    利用Python操作excel表格之openyxl介绍 by:授客 QQ:1033553122 欢迎加入全国软件测试交流qq群(群号:7156436) ## 绘图 c = LineChart()    ...

  6. 【转】python操作excel表格(xlrd/xlwt)

    [转]python操作excel表格(xlrd/xlwt) 最近遇到一个情景,就是定期生成并发送服务器使用情况报表,按照不同维度统计,涉及python对excel的操作,上网搜罗了一番,大多大同小异, ...

  7. Python 利用Python操作excel表格之xlwt介绍

    利用Python操作excel表格之xlwt介绍   by:授客 QQ:1033553122 直接上代码   案例1 #!/usr/bin/env python # -*- coding:utf-8 ...

  8. 怎么把excel表格内的数据导入数据库?

    第一种方法: 思路:想要把excel表格内的数据直接导入数据库不是那么容易,可以把excel表格另存为.csv格式的文档(特点:内容以逗号分割):然后通过一系列的文档操作函数处理成为一个二维数组,然后 ...

  9. 用NPOI、C#操作Excel表格生成班级成绩单

    在C#中利用NPOI操作Excel表格非常方便,几乎上支持所有的Excel表格本身所有的功能,如字体设置.颜色设置.单元格合并.数值计算.页眉页脚等等. 这里准备使用NPOI生成一个班级成绩单Exce ...

随机推荐

  1. spring BeanDefinition 继承结构图

    ConfigurationClassBeanDefinition 是ConfigurationClassBeanDefinitionReader的静态内部类

  2. 创建Maven项目中的几个问题

    一.用eclipse创建maven的web项目,需手动添加WEB-INF文件夹及其web.xml配置文件 二.设置编译版本1.8 在pom.xml中设置 1 <build> 2 <! ...

  3. 大话Python切片,助你彻底掌控切片小妖精

    切片语义 生活中切黄瓜.切萝卜.一本书的每一页等等都是符合切片的语义 切片的语义是从某个东西中通过某种手段拿到某个整体的一部分 切片是拿来主义,建立在已经有的序列上,有黄瓜才能切黄瓜  列表 -> ...

  4. Go gin框架 使用swagger生成API文档

    swaggos 是一个golang版本的swagger文档生成器,提供了native code包装器,并且支持主流的web框架包裹器 github 地址:https://github.com/swag ...

  5. 上部:问道 | R语言数据分析(北京邮电大学)自整理笔记

    第1章 气象万千 数以等观 数据分析:发现数据背后的规律 等号的重要性,建立模型 第2章所谓学习.归类而已 2.1所谓学习,归类而已(1) ps:机器学习只是归归类? 有监督学习--分类:无监督学习- ...

  6. 06 解决Sublime Text3输入法不跟随的问题

    安装原生的Sublime, 输入法是不会跟随Sublime的编译文件页面的,会失去焦点,这样写代码写文档时看起来会十分不方便,参考了一些资料,下载插件做了配置,已经在自己机器上用百度输入法测试成功,记 ...

  7. JavaScript判断字符串中出现次数最多的字符,并统计其次数

    要求: 输出一个给定字符串``中出现次数最多的字符,并统计其次数. 实现思路: 利用charA()遍历这个字符串 把每个字符都存储给对象,如果对象没有该属性,就先幅值为1,如果存在了就+1 遍历对象, ...

  8. ANOI 2009 【同类分布】

    好累啊啊啊~~~~~~,刷了一天的题了,嗯,再写两篇题解我就去颓Slay... 思路分析: 刚刚我们讲了数位DP,现在就感受一下吧.(其实我也就只敢做做安徽的题,四川的数位DP想都不敢想) 嗯好,我们 ...

  9. 萌新学python

    python python安装 进入官网http://www.python.org/download/ 下载 我下的是3.6.6大家可以根据需要下载(3.x和2.x不兼容请小心) 之后安装就可以了 p ...

  10. JavaScript高级程序设计(第4版)pdf 电子书

    JavaScript高级程序设计(第4版)pdf 电子书 免责声明:JavaScript高级程序设计(第4版)pdf 电子书下载 高清收集于网络,请勿商用,仅供个人学习使用,请尊重版权,购买正版书籍. ...