Python数据分析与挖掘所需的Pandas常用知识
Python数据分析与挖掘所需的Pandas常用知识
前言
Pandas基于两种数据类型:series与dataframe。
一个series是一个一维的数据类型,其中每一个元素都有一个标签。series类似于Numpy中元素带标签的数组。其中,标签可以是数字或者字符串。
一个dataframe是一个二维的表结构。Pandas的dataframe可以存储许多种不同的数据类型,并且每一个坐标轴都有自己的标签。你可以把它想象成一个series的字典项。
Pandas常用知识
一、读取csv文件为dataframe
二、dataframe的数据概况
三、取列数据
四、取行数据
五、取某一单元格数据
六、缺失值处理
七、归一化处理
八、排序
九、索引重新编号
十、求均值
十一、矢量化操作(批量操作)
十二、透视表
一、读取csv文件为dataframe
Pandas很好的一点是,可以操作表文件。输出为dataframe格式,这点很nice。 使用pandas.read_csv()读取csv文件,输出为dataframe格式数据。 这里数据data.csv数据集下载自百度地图。
import pandas as pd
filepath = r'C:/Users/lenovo/Desktop/20180108-百度地图/20180108-百度地图/data.csv'
df = pd.read_csv(filepath)
#为了方便,我只显示三行,其实结果并不是这样子
print(df)
检测下数据格式
#检测下数据格式是否为DataFrame
print(type(df))
#输出class 'pandas.core.frame.DataFrame
二、 DataFrame数据概况
我们想知道数据如下知识:
展示dataframe前后几条记录
显示dataframe的列名字
查看dataframe的维度情况(几行几列)
2.1展示dataframe前后几行
#展示前两条记录(根据需要显示条数)
df.head(2)
print(df.head(2)) #展示后三条记录
df.tail(3)
print(df.tail(3))
2.2展示dataframe列名
#展示列名
col_names = df.columns
print(col_names) #查看下col_names格式
type(col_names) #将col_names转化为list
col_list = col_names.tolist()
col_list
三、从dataframe中取列数据
使用dataframe[column_name],返回series格式数据。 series序列数据类似于list,你可以近似等同于list。 只不过返回数据中会多一列index索引。如下面的左侧数字序号
3.1 取一列数据
#这里我们一列,如取Name列数据
df['Name'][:5]
print(df['Name'][:5])
3.2取多列数据
#这里返回的数据还是dataframe格式,为了方便也只显示前几条记录
cols = ['name', 'province_name', 'city_name', 'city_code', 'area', 'addr']
df[cols]
print(df[cols])
四、从dataframe中取行数据(记录)
ix[row, col] 中括号中第一个参数row是行参数,你想选择的数据行数。 第二个参数col是列参数,选择你想要的列数据项。
4.1取一行数据
#第一行所有数据
df.ix[0, :]
print(df.ix[0, :]) #第一行的某几列数据
col = ['Survived', 'Pclass', 'Sex']
df.ix[0, col]
print(df.ix[0, col])
2取多行数据
#取多行数据,所有列。这里我选择前5行,所有列.
#这里是不是很像切片操作。python基础很重要
df.ix[:5, :]
print(df.ix[:5, :]) #取多行,某几列
df.ix[:5, col]
print(df.ix[:5, col])
五、取某一单元格数据
取第一行第一列。df.ix[0,0] 第三行第七列。df.ix[2,6]
六、缺失值处理
缺失值一般标记为NaN,处理办法如下
df.dropna(axis)
默认直接使用df.dropna()
axis=1,按照行进行缺失值处理
axis=0,按照列进行缺失值处理
df.dropna(axis=0,subset)
axis=0,按照列方向处理subset中的列缺失值
subset=[column] subset含有一个或多个列名的的list
6.1按照行进行缺失值处理
#按照列处理缺失值(为显示方便,只显示前5行)
df.dropna(axis=0) #对指定列进行缺失值处理
df.dropna(axis=0,subset=['Sex','Age'])
七、归一化处理
数据集中,不同的列的数据可能在不同量级,如果直接进行分析。模型会认为数字大的影响力大,数字小的影响力小。 最终结果可能导致量级小的变量被剔除出模型。因此需要将数据归一化,变成同一量级的数据,这就是归一化操作。 在这里我们只对一列操作下,其余列也需要操作,但为了方便,这里只写一列的归一化处理。
处理步骤:
1.选取该列的最大值
max_value = df[col].max()
2.该列所有值均除以max_value
这里要注意,我们会用到pandas特性,矢量化操作,也就是可以对一个列表进行批量同样的操作。
#这里我们选Fare列进行归一化,先看下Fare的数据
#为了方便显示,只显示了前10个
df['Fare'] #这里我们选Fare列进行归一化
max_value = df['Fare'].max()
max_value #这里我们选Fare列进行归一化
max_value = df['Fare'].max()
max_value #归一化,并将数据传入新列new_Fare
df['new_Fare']=df['Fare']/max_value
df['new_Fare']
八、排序
df.sort_values(col,inplace,ascending)
col 对col列进行排序
inplace 布尔型值,是否原地操作。
True时,操作结果覆盖掉原数据,原数据被修改
False时,新建一个新数据,原数据未被修改
ascending 布尔型值。升序降序。 False降序,True升序 #对Age列进行降序操作,不修改原始数据
df.sort_values('Age',inplace=False,ascending=False)
九、索引重新
将排序后的索引重新排序
df.reset_index(drop)
drop 为布尔型值,True表示修改原始数据的索引。
False保留原始数据索引序列。 df.reset_index(drop=False)
十、求平均值
10.1所有列的平均值信息
df.mean()
10.2 单个列的平均值
df['Age'].mean()
十一、矢量化操作(批量操作)
一般对如list样式的数据批量操作,需要写循环,但是这样费时费力。 pandas基于numpy,可进行矢量化操作,一行就能完成复杂的循环语句,而且运行效率还很高。
#对Age列批量加10
df['Age']+10).head #对Age列批量减20
df['Age']-10
十二、透视表
df.pivot_table(index=col1,values=col2,aggfunc='numpy函数')
围绕index参数列,分析各个col2,aggfunc是np函数,当然这里的aggfunc也可以是自定义函数。
#分析平均年龄对对生存率的影响。
#0为死亡,1为生存。
#这里我们发现年龄对生存率有影响。
import numpy as np
df.pivot_table(index='Survived',values='Age',aggfunc=np.mean) #分析仓位等级对生存率影响。0为死亡,1为生存。
#仓位为一等二等三等分别取值1,2,3
#一等舱最高级。我们发现仓位等级对生存也有影响。
df.pivot_table(index='Survived',values='Pclass',aggfunc=np.mean)
pandas提取html中的表格数据
pandas会在网页中寻找任何符合html表形式的数据,并将其转化WieDataFrame对象作为返回结果
Code
pandas使用方法
import pandas as pd #header=1 显示列名;header=0,不显示
pd.read_html(url,header)
实战代码开始
import pandas as pd
url = "http://hz.house.ifeng.com/detail/2014_10_28/50087618_1.shtml"
data = pd.read_html(url,header=1)
print(data)
注意啊,这里得到的数据格式是list。
[ 序号 楼盘名称 城区 签约套数 预定套数 签约面积(㎡)签约均价(元/㎡)
0 1.0 龙湖春江郦城 滨江 18 0 2178.61 23757.0
1 2.0 海威钱塘之星 滨江 13 0 629.55㎡ 17398.0
2 3.0 大家运河之星 拱墅 12 0 1052.72㎡ 10457.0
3 4.0 保利城市果岭 下沙 8 0 743.05㎡ 10457.0
.. ... ... ... ... ... ... ...
85 86.0 广宇锦绣桃源 拱墅 1 0 86.44㎡ 12473.0
86 87.0 景瑞申花壹号院 拱墅 1 0 89.18㎡ 21529.0
87 88.0 复地黄龙和山 西湖 0 1 0㎡ 0.0
88 89.0 中粮方圆府 下城 0 1 0㎡ 0.0
89 90.0 东方铭楼 下沙 0 16 0㎡ 0.0
90 NaN 总计签约: 主城区 216 40 21755.55㎡ NaN [91 rows x 7 columns], 2
DataFrame对象
df.to_json()
而只要知道数据存储在DataFrame中,一切都变的简单起来。 比如我很希望数据以json记形式输出,很简单!这只是一行代码的事情。
import pandas as pd data = pd.read_html(url,header=1)
#data数据是list类型,要先转化为dataframe
df = pd.DataFrame(data)
df.to_json(orient='records')
df.to_csv()
dataframe对象,还可以将数据输出保存为csv文件
import pandas as pd data = pd.read_html(url,header=1)
df = pd.DataFrame(data)
#encoding为gbk编码,可以在office excel中看中文不乱吗
df.to_csv('data.csv',encoding='gbk')
转自:简书专栏:https://www.jianshu.com/u/c1ab741ef52e
Python数据分析与挖掘所需的Pandas常用知识的更多相关文章
- 【读书笔记与思考】《python数据分析与挖掘实战》-张良均
[读书笔记与思考]<python数据分析与挖掘实战>-张良均 最近看一些机器学习相关书籍,主要是为了拓宽视野.在阅读这本书前最吸引我的地方是实战篇,我通读全书后给我印象最深的还是实战篇.基 ...
- 学习参考《Python数据分析与挖掘实战(张良均等)》中文PDF+源代码
学习Python的主要语法后,想利用python进行数据分析,感觉<Python数据分析与挖掘实战>可以用来学习参考,理论联系实际,能够操作数据进行验证,基础理论的内容对于新手而言还是挺有 ...
- python数据分析与挖掘实战
<python数据分析与挖掘实战>PDF&源代码&张良均 下载:链接:https://pan.baidu.com/s/1TYb3WZOU0R5VbSbH6JfQXw提取码: ...
- python 数据分析与挖掘实战01
python 数据分析与挖掘实战 day 01 08/02 这种从数据中"淘金",从大量数据包括文本中挖掘出隐含的.未知的.对决策有潜在价值关系.模式或者趋势,并用这些知识和规则建 ...
- python数据分析与挖掘实战第二版pdf-------详细代码与实现
[书名]:PYTHON数据分析与挖掘实战 第2版[作者]:张良均,谭立云,刘名军,江建明著[出版社]:北京:机械工业出版社[时间]:2020[页数]:340[isbn]:9787111640028 学 ...
- 《Python数据分析与挖掘实战》读书笔记
大致扫了一遍,具体的代码基本都没看了,毕竟我还不懂python,并且在手机端的排版,这些代码没法看. 有收获,至少了解到以下几点: 一. Python的语法挺有意思的 有一些类似于JavaSc ...
- Python数据分析:手把手教你用Pandas生成可视化图表
大家都知道,Matplotlib 是众多 Python 可视化包的鼻祖,也是Python最常用的标准可视化库,其功能非常强大,同时也非常复杂,想要搞明白并非易事.但自从Python进入3.0时代以后, ...
- 利用python数据分析与挖掘相关资料总结
小生今年研二,目前主要从事软件工程数据挖掘与分析.之前一直苦于找不到一个从数据预处理.数据分析.数据可视化和软件建模的统一平台.因此,小生辗转反辙学习了java,R语言,python,scala等等. ...
- Python数据分析与挖掘常用模块
python在数据科学方面需要用到的库: a.Numpy:科学计算库.提供矩阵运算的库. b.Pandas:数据分析处理库 c.scipy:数值计算库.提供数值积分和常微分方程组求解算法.提供了一个非 ...
随机推荐
- Atitit.linux 内核 新特性 新功能
Atitit.linux 内核 新特性 新功能 1. Linux 3.2内核新特性 2012-02-12 22:41:471 1.1. EXT4:支持更大的块2 1.2. BTRFS:更快的数据清理 ...
- 没有博士学位,照样玩转TensorFlow深度学习
教程 | 没有博士学位,照样玩转TensorFlow深度学习 机器之心2017-01-24 12:32:22 程序设计 谷歌 操作系统 阅读(362)评论(0) 选自Codelabs 机器之心编译 参 ...
- C# Post Json数据到对方url
1. /// <summary> /// 调用对方Url,Post上传数据 /// </summary> /// <param name="postData&q ...
- 王立平--Eclipse中配置svn
1.-------------------------------------------------------------------------------------------------- ...
- PHP基础之Autoload
PHP的自动加载autoload机制很重要,这里做2个小练习 原创文章,转载请注明:http://www.cnblogs.com/phpgcs 文件结构如下,2种方式实现自动加载 1,自定义函数 2, ...
- PHP递归实现无限级分类
在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性.那么PHP是如何实现无限级分类的呢?我们在本文中使用递归算法并结合mysql数据表实现无限级分类. 在一些复杂的系统中,要求对信 ...
- PNP与NPN三极管
主要区别是电流流向和电压不同:PNP管子是发射极流入后从基极和集电极流出,NPN管子是基极和集电极流入从发射极流出.PNP管子工作在放大区时电压是,Ue>Ub>Uc,NPN管子工作在放大区 ...
- C++资源文件初使用[C++菜鸟]
起因 项目中需要可能变动的一些映射关系,而且是封装成独立的库——一个dll文件. 思路:把excel文件导出成.csv文件,当作资源加载到项目里,读取后拿到全部的字符,再分割处理. 添加资源 VS20 ...
- jQuery.getJSON()方法小记
今天看了下jQquery中的getJSON()方法,做点小结: 原型: jQuery.getJSON( url [, data ] [, success(data, textStatus, jqXHR ...
- CodeIgniter框架——访问方式 URI 分配变量 数据库操作
1.访问方式: CodeIgniter 的访问URL使用的是pathinfo,入口文件/控制器/方法(/参数列表) eg:localhost/index.php/welcome/index/id 第一 ...