本文介绍的方法均为我在做作业是常用的方法,要是有不对的地方还请大神指正
本文示例文件
排名,姓名,企业简称,总部(省份),总部(城市),现金捐赠总额(万元)
1,许家印,恒大集团,广东,深圳,407000
2,杨国强家族,碧桂园,广东,佛山,165645
3,马云,阿里巴巴,浙江,杭州,98020
4,马化腾,腾讯,广东,深圳,73084
5,卢志强,中国泛海控股集团,北京,北京,58426
读txt或csv文件方法--pd.read_csv(filename,dtype,encoding)
除了上面列出来的三个参数外,读文件方法的相关参数可自行查阅官方文档
官方文档
>>> data.iloc
<pandas.core.indexing._iLocIndexer object at 0x0000012532DD3FB0>
>>> import pandas as pd
>>> filename = 'D:\PY\PY_work\py123\pandas\示例文件.csv'
>>> data = pd.read_csv(filename)
>>> pd.set_option('display.unicode.east_asian_width', True) # 设置输出时列对齐
>>> data
排名 姓名 企业简称 总部(省份) 总部(城市) 现金捐赠总额(万元)
0 1 许家印 恒大集团 广东 深圳 407000
1 2 杨国强家族 碧桂园 广东 佛山 165645
2 3 马云 阿里巴巴 浙江 杭州 98020
3 4 马化腾 腾讯 广东 深圳 73084
4 5 卢志强 中国泛海控股集团 北京 北京 58426
读excel文件方法--pd.read_excel()
使用该方法读取.xlsx文件需要借助openpyxl模块,读取.xls文件需要借助xlrd模块。
这里只写出几种常用文件的读取方式,其他方法(比如读取html网页)可自行查询相关文档。
获取DataFrame中的数据
通过行标签获取特定列
>>> data['排名']
0 1
1 2
2 3
3 4
4 5
通过行序号的切片获取多行
>>> data[:2]
排名 姓名 企业简称 总部(省份) 总部(城市) 现金捐赠总额(万元)
0 1 许家印 恒大集团 广东 深圳 407000
1 2 杨国强家族 碧桂园 广东 佛山 165645
通过iloc、loc属性获取
iloc :基于行、列序号索引进行查询,索引号均是从0开始。输入可以是:单个整数、整数列表或数组、整数切片、布尔数组。
>>> data.iloc[0][:]
排名 1
姓名 许家印
企业简称 恒大集团
总部(省份) 广东
总部(城市) 深圳
现金捐赠总额(万元) 407000
Name: 0, dtype: object
loc :基于行、列标签索引进行索引查询。输入可以是:单个标签、标签列表或数组、标签切片(此处切片包含结束位置)、布尔数组。
>>> data.loc[:,'排名']
0 1
1 2
2 3
3 4
4 5
Name: 排名, dtype: int64
>>> data.loc[:]['排名']
0 1
1 2
2 3
3 4
4 5
Name: 排名, dtype: int64
pandas分组(GroupBy)
获得的groupby对象可以进行遍历,依次对不同分组进行操作。
>>> grouped = data.groupby('总部(省份)')
查看分组
>>> grouped.groups
{'北京': [4], '广东': [0, 1, 3], '浙江': [2]}
查看某一个组
>>> grouped.get_group('广东')
排名 姓名 企业简称 总部(省份) 总部(城市) 现金捐赠总额(万元)
0 1 许家印 恒大集团 广东 深圳 407000
1 2 杨国强家族 碧桂园 广东 佛山 165645
3 4 马化腾 腾讯 广东 深圳 73084
聚合
聚合函数为每个组返回一个聚合值。 一旦创建了 group by 对象,就可以对分组数据执行多个聚合操作。一个明显的方法是通过聚合或等效的 agg 方法进行聚合
注意一次应用多个聚合函数传入的参数应该是列表
>>> grouped['现金捐赠总额(万元)'].agg(np.mean)
总部(省份)
北京 58426.0
广东 215243.0
浙江 98020.0
Name: 现金捐赠总额(万元), dtype: float64
>>> grouped['现金捐赠总额(万元)'].agg([np.mean,np.size])
mean size
总部(省份)
北京 58426.0 1
广东 215243.0 3
浙江 98020.0 1
转换、过滤需要传入一个函数作为参数,这里不做介绍。
pandas数据列插入或删除
函数原型如下
DataFrame.insert(loc, column, value, allow_duplicates=False)
DataFrame.drop(labels=None, axis=0, index=None, columns=None, level=None, inplace=False,
errors='raise')
DataFrame行、列标签改变--DataFrame.rename()
>>> data.rename(columns={'排名':'rank'})
rank 姓名 企业简称 总部(省份) 总部(城市) 现金捐赠总额(万元)
0 1 许家印 恒大集团 广东 深圳 407000
1 2 杨国强家族 碧桂园 广东 佛山 165645
2 3 马云 阿里巴巴 浙江 杭州 98020
3 4 马化腾 腾讯 广东 深圳 73084
4 5 卢志强 中国泛海控股集团 北京 北京 58426
>>> data.rename(index={0:'零'})
排名 姓名 企业简称 总部(省份) 总部(城市) 现金捐赠总额(万元)
零 1 许家印 恒大集团 广东 深圳 407000
1 2 杨国强家族 碧桂园 广东 佛山 165645
2 3 马云 阿里巴巴 浙江 杭州 98020
3 4 马化腾 腾讯 广东 深圳 73084
4 5 卢志强 中国泛海控股集团 北京 北京 58426
DataFrame排序
DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last', ignore_index=False, key=None)
>>> data.sort_values('现金捐赠总额(万元)')
排名 姓名 企业简称 总部(省份) 总部(城市) 现金捐赠总额(万元)
4 5 卢志强 中国泛海控股集团 北京 北京 58426
3 4 马化腾 腾讯 广东 深圳 73084
2 3 马云 阿里巴巴 浙江 杭州 98020
1 2 杨国强家族 碧桂园 广东 佛山 165645
0 1 许家印 恒大集团 广东 深圳 407000
DataFrame.sort_index(axis=0, level=None, ascending=True, inplace=False, kind='quicksort', na_position='last', sort_remaining=True, ignore_index=False, key=None)
key参数合理结合lambda运用,可以起到事半功倍的效果。
ascending参数为True时升序排序,反之降序
判断是否是数字的函数
def isnumber(aString):#判断是否为浮点数
try:
float(aString)
return True
except:
return False
对于需要判断数字是整数还是浮点数并输出的时候,可以通过这个函数结合a.is_integer()方法进行操作。
除此之外可以以字符串形式读入,在排序时通过key参数的使用使得数据按照float形式排序,所得结果依然是字符串形式,从而输出结果整数就是整数格式,浮点数就是浮点数格式。