pandas数据分析入门二
来源:互联网 发布:淘宝售假扣48分重开店 编辑:程序博客网 时间:2024/06/05 08:56
1.1 结构化数据输入输出
read_csv与to_csv 是⼀对输⼊输出的⼯具,read_csv直接返回pandas.DataFrame,⽽to_csv只要执行命令即可写文件
read_table:功能类似
read_fwf:操作fixed width file
read_excel与to_excel方便的与excel交互
header 表⽰数据中是否存在列名,如果在第0行就写就写0,并且开始读数据时跳过相应的行数,不存在可以写none
names 表示要用给定的列名来作为最终的列名
encoding 表⽰数据集的字符编码,通常而言一份数据为了⽅便的进⾏⽂件传输都以utf-8作为标准
这里用的是自己的一个csv
数据,因为找不到参考的这个pdf中的数据。
cnames=['经度','纬度']taxidata2 = pd.read_csv('20140401.csv',header = 4,names=cnames,encoding='utf-8')taxidata2
全部参数的请移步API:
http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html#pandas.read_csv
这里介绍一些常用的参数:
读取处理:
skiprows:跳过⼀定的⾏数
nrows:仅读取⼀定的⾏数
skipfooter:尾部有固定的⾏数永不读取
skip_blank_lines:空⾏跳过
内容处理:
sep/delimiter:分隔符很重要,常⻅的有逗号,空格和Tab('\t')
na_values:指定应该被当作na_values的数值
thousands:处理数值类型时,每千位分隔符并不统⼀ (1.234.567,89或者1,234,567.89都可能),此时要把字符串转化为
数字需要指明千位分隔符
收尾处理:
index_col:将真实的某列(列的数⺫,甚⾄列名)当作index
squeeze:仅读到⼀列时,不再保存为pandas.DataFrame⽽是pandas.Series
1.2 Excel ... ?
对于存储着极为规整数据的Excel而言,其实是没必要一定用Excel来存,尽管Pandas也十分友好的提供了I/O接口。
taxidata.to_excel('t0401.xlsx',encoding='utf-8')taxidata_from_excel = pd.read_excel('t0401.xlsx',header=0, encoding='utf-8')taxidata_from_excel
注意:当你的xls文件行数很多超过65536时,就会遇到错误,解决办法是将写入的格式变为xlsx
。excel函数受限制问题
唯一重要的参数:sheetname=k,标志着一个excel的第k个sheet页将会被取出。(从0开始)
1.3 半结构化数据
JSON:网络传输中常⽤的⼀种数据格式。
仔细看一下,实际上这就是我们平时收集到异源数据的风格是一致的:
列名不能完全匹配
key可能并不唯一
元数据被保存在数据里
import jsonjson_data = [{'name':'Wang','sal':50000,'job':'VP'},\ {'name':'Zhang','job':'Manager','report':'VP'},\ {'name':'Li','sal':5000,'report':'IT'}]data_employee = pd.read_json(json.dumps(json_data))data_employee_ri = data_employee.reindex(columns=['name','job','sal','report'])data_employee_ri
输出结果:
二. 深入Pandas数据操纵
在前面部分的基础上,数据会有更多种操纵方式:
通过列名、行index来取数据,结合ix、iloc灵活的获取数据的一个子集(第一部分已经介绍)
按记录拼接(就像Union All)或者关联(join)
方便的统计函数与⾃定义函数映射
排序
缺失值处理
与Excel一样灵活的数据透视表(在第四部分更详细介绍)
2.1 数据集整合
2.1.1 横向拼接:直接DataFrame
pd.DataFrame([np.random.rand(2),np.random.rand(2),np.random.rand(2)],columns=['C1','C2'])
2.1.2 横向拼接:Concatenate
pd.concat([data_employee_ri,data_employee_ri,data_employee_ri])
输出结果
2.1.3 纵向拼接:Merge
根据数据列关联,使用on关键字
可以指定一列或多列
可以使⽤left_on和right_on
pd.merge(data_employee_ri,data_employee_ri,on='name')
根据index关联,可以直接使用left_index和right_index
TIPS: 增加how关键字,并指定
how = 'inner'
how = 'left'
how = 'right'
how = 'outer'
结合how,可以看到merge基本再现了SQL应有的功能,并保持代码整洁
2.2 自定义函数映射
dataNumPy32 = np.asarray([('Japan','Tokyo',4000),('S.Korea','Seoul',1300),('China','Beijing',9100)])DF32 = pd.DataFrame(dataNumPy32,columns=['nation','capital','GDP'])DF32
2.2.1 map: 以相同规则将1列数据作1个映射,也就是进行相同函数的处理
def GDP_Factorize(v): fv = np.float64(v) if fv > 6000.0: return 'High' elif fv < 2000.0: return 'Low' else: return 'Medium'DF32['GDP_Level'] = DF32['GDP'].map(GDP_Factorize)DF32['NATION'] = DF32.nation.map(str.upper)DF32
2.3 排序
sort: 按⼀列或者多列的值进行行级排序
sort_index: 根据index⾥的取值进行排序,而且可以根据axis决定是重排行还是列
2.3.1 sort
dataNumPy33 = np.asarray([('Japan','Tokyo',4000),('S.Korea','Seoul',1300),('China','Beijing',9100)])DF33 = pd.DataFrame(dataNumPy33,columns=['nation','capital','GDP'])DF33
DF33.sort(['capital','nation'],ascending=False)
ascending
是降序的意思。
2.3.2 sort_index
DF33.sort_index(axis=1,ascending=True)
2.3.3 一个好用的功能:Rank
DF33.rank()
2.4 缺失数据处理
2.4.1 忽略缺失值:
DF34.mean(skipna=True)
不忽略缺失值的话,估计就不能计算均值了吧。
如果不想忽略缺失值的话,就需要祭出fillna了:
注:这里我在猜想,axis=1
是不是就代表从行
的角度呢?还是得多读书查资料呀。
三. “一组”大熊猫:Pandas的groupby
groupby的功能类似SQL的group by关键字:
Split-Apply-Combine
Split,就是按照规则分组
Apply,通过⼀定的agg函数来获得输⼊pd.Series返回⼀个值的效果
Combine,把结果收集起来
Pandas的groupby的灵活性:
分组的关键字可以来⾃于index,也可以来⾃于真实的列数据
分组规则可以通过⼀列或者多列
没有具体数据,截图看一下吧,方便日后回忆。
分组可以快速实现MapReduce
的逻辑
Map: 指定分组的列标签,不同的值就会被扔到不同的分组处理
Reduce: 输入多个值,返回1个值,一般可以通过agg实现,agg能接受1个函数
- pandas数据分析入门二
- pandas 数据分析入门
- python数据分析pandas包入门学习(二)基本功能
- 利用Python数据分析:pandas入门(二)
- 数据分析框架Pandas入门
- Python 数据分析包:pandas 入门
- 利用python进行数据分析-pandas入门
- 轻松入门pandas查询和分析数据
- 利用Python数据分析:pandas入门(四)
- 利用Python数据分析:pandas入门(五)
- 利用Python数据分析:pandas入门(六)
- Python——数据分析Pandas入门
- Python数据分析入门-Pandas环境搭建
- python数据分析(pandas入门)
- pandas入门学习二
- 数据可视化(二)Matplotlib pandas简易入门
- Python数据分析入门之pandas总结基础
- 利用python进行数据分析-pandas入门2
- 蒙特卡洛法多线程求圆周率
- 用arm-none-linux-gnueabi交叉编译Linux内核
- Mybatis MapperScannerConfigurer 自动扫描 将Mapper接口生成代理注入到Spring
- 点击UIViewController任意位置,收起键盘的3种方法
- Spark Streaming资源动态申请和动态控制消费速率原理剖析
- pandas数据分析入门二
- 尾部的零
- AsyncTask异步交互的用法简介
- Android 屏幕(View)坐标系统
- IntelliJ IDEA 使用心得与常用快捷键
- Java并发编程:Lock
- Jquery插件知识之Jquery.cookie实现页面传值
- Xcode LLDB Debug教程
- Lucene学习总结之六:Lucene打分公式的数学推导