pandas神器操作excel表格大全(数据分析数据预处理)

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

关注公众号“轻松学编程”了解更多,文末有公众号二维码,可以扫码关注哦。
pandas神器操作excel表格大全(数据分析数据预处理)

前言

准备三份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])

输出:

pandas神器操作excel表格大全(数据分析数据预处理)

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))

输出:

pandas神器操作excel表格大全(数据分析数据预处理)

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)

输出:

pandas神器操作excel表格大全(数据分析数据预处理)

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])

输出:

pandas神器操作excel表格大全(数据分析数据预处理)

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])

pandas神器操作excel表格大全(数据分析数据预处理)

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])

pandas神器操作excel表格大全(数据分析数据预处理))]

4、倒置(转置)

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

输出:

pandas神器操作excel表格大全(数据分析数据预处理)

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))

输出:
pandas神器操作excel表格大全(数据分析数据预处理)

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))

输出:

pandas神器操作excel表格大全(数据分析数据预处理)

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'))

pandas神器操作excel表格大全(数据分析数据预处理)

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()))

pandas神器操作excel表格大全(数据分析数据预处理)

6.2 分组聚合操作

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

pandas神器操作excel表格大全(数据分析数据预处理)

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'])

pandas神器操作excel表格大全(数据分析数据预处理)

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)

pandas神器操作excel表格大全(数据分析数据预处理)

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())

pandas神器操作excel表格大全(数据分析数据预处理)

7、修改

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

pandas神器操作excel表格大全(数据分析数据预处理)

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)

pandas神器操作excel表格大全(数据分析数据预处理)

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)

pandas神器操作excel表格大全(数据分析数据预处理)

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)

pandas神器操作excel表格大全(数据分析数据预处理)

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]))

pandas神器操作excel表格大全(数据分析数据预处理)

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())

pandas神器操作excel表格大全(数据分析数据预处理)

11.2 删除重复行

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

pandas神器操作excel表格大全(数据分析数据预处理)

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)

pandas神器操作excel表格大全(数据分析数据预处理)

pandas神器操作excel表格大全(数据分析数据预处理)

pandas神器操作excel表格大全(数据分析数据预处理)

后记

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

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

公众号

pandas神器操作excel表格大全(数据分析数据预处理)

pandas神器操作excel表格大全(数据分析数据预处理)

上一篇:windows+php5.5+apache2.4+tomcat+mod_jk配置


下一篇:比较有用的log4j.properties