python pandas数据处理和基本操作

本文介绍的方法均为我在做作业是常用的方法,要是有不对的地方还请大神指正

本文示例文件

排名,姓名,企业简称,总部(省份),总部(城市),现金捐赠总额(万元)
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形式排序,所得结果依然是字符串形式,从而输出结果整数就是整数格式,浮点数就是浮点数格式。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值