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常用知识的更多相关文章

  1. 【读书笔记与思考】《python数据分析与挖掘实战》-张良均

    [读书笔记与思考]<python数据分析与挖掘实战>-张良均 最近看一些机器学习相关书籍,主要是为了拓宽视野.在阅读这本书前最吸引我的地方是实战篇,我通读全书后给我印象最深的还是实战篇.基 ...

  2. 学习参考《Python数据分析与挖掘实战(张良均等)》中文PDF+源代码

    学习Python的主要语法后,想利用python进行数据分析,感觉<Python数据分析与挖掘实战>可以用来学习参考,理论联系实际,能够操作数据进行验证,基础理论的内容对于新手而言还是挺有 ...

  3. python数据分析与挖掘实战

    <python数据分析与挖掘实战>PDF&源代码&张良均 下载:链接:https://pan.baidu.com/s/1TYb3WZOU0R5VbSbH6JfQXw提取码: ...

  4. python 数据分析与挖掘实战01

    python 数据分析与挖掘实战 day 01 08/02 这种从数据中"淘金",从大量数据包括文本中挖掘出隐含的.未知的.对决策有潜在价值关系.模式或者趋势,并用这些知识和规则建 ...

  5. python数据分析与挖掘实战第二版pdf-------详细代码与实现

    [书名]:PYTHON数据分析与挖掘实战 第2版[作者]:张良均,谭立云,刘名军,江建明著[出版社]:北京:机械工业出版社[时间]:2020[页数]:340[isbn]:9787111640028 学 ...

  6. 《Python数据分析与挖掘实战》读书笔记

    大致扫了一遍,具体的代码基本都没看了,毕竟我还不懂python,并且在手机端的排版,这些代码没法看. 有收获,至少了解到以下几点: 一. Python的语法挺有意思的     有一些类似于JavaSc ...

  7. Python数据分析:手把手教你用Pandas生成可视化图表

    大家都知道,Matplotlib 是众多 Python 可视化包的鼻祖,也是Python最常用的标准可视化库,其功能非常强大,同时也非常复杂,想要搞明白并非易事.但自从Python进入3.0时代以后, ...

  8. 利用python数据分析与挖掘相关资料总结

    小生今年研二,目前主要从事软件工程数据挖掘与分析.之前一直苦于找不到一个从数据预处理.数据分析.数据可视化和软件建模的统一平台.因此,小生辗转反辙学习了java,R语言,python,scala等等. ...

  9. Python数据分析与挖掘常用模块

    python在数据科学方面需要用到的库: a.Numpy:科学计算库.提供矩阵运算的库. b.Pandas:数据分析处理库 c.scipy:数值计算库.提供数值积分和常微分方程组求解算法.提供了一个非 ...

随机推荐

  1. vue 销毁组件

    销毁组件 // get~ 销毁组件 destroyElement() { this.$destroy(true); this.$el.parentNode.removeChild(this.$el); ...

  2. virtualenv下使用matplotlib

    Unable to “import matplotlib.pyplot as plt” in virtualenv   (PyMVPA) SimilarFacedeMacBook-Pro:PyMVPA ...

  3. ConcurrentHashMap的JDK1.8实现

    今天我们介绍一下ConcurrentHashMap在JDK1.8中的实现.基本结构 ConcurrentHashMap在1.8中的实现,相比于1.7的版本基本上全部都变掉了.首先,取消了Segment ...

  4. js弹窗效果实现

    1.首先准备好要弹出的内容,一般用ajax向后台请求数据,组装成html: 主页:a.html,含有div: <div class="cms-window cms-window-oth ...

  5. Mockito - Wanted but not invoked: Actually, there were zero interactions with this mock

    要测试的类:IndexController.java 代码: @Mock private TemplateWrapper templateWrapper = spy(new TemplateWrapp ...

  6. IRQ与FIQ的区别

    1.对FIQ你必须进快处理中断请求,并离开这个模式. 2.IRQ可以被FIQ所中断,但FIQ不能被IRQ所中断,在处理FIQ时必须要关闭中断. 3.FIQ的优先级比IRQ高. 4.FIQ模式下,比IR ...

  7. 用jquery替换dojo中的ajax

    function getpoints(closeid) {/*获取数据列表*/ var closesid = closeid; $.ajax({ url:'*.ashx") %>?op ...

  8. plsql programming 12 集合(忽略, 个人感觉用不到)

    关联数组, 嵌套表, varray 个人并不推荐使用集合, 因为操作有别于普通字段. 集合中每一个元素的数据类型都是相同的, 因此这些元素都是同质的(同质元素) 这一章的内容先忽略吧, 因为个人感觉用 ...

  9. jQuery CSS 操作函数

    CSS 属性 描述 css() 设置或返回匹配元素的样式属性. height() 设置或返回匹配元素的高度. offset() 返回第一个匹配元素相对于文档的位置. offsetParent() 返回 ...

  10. apache2+svn Cannot load modules/mod_dav_svn.so into server: \xd5\xd2\xb2\xbb\xb5\xbd\xd6\xb8\xb6\xa8\xb5\xc4\xc4\xa3\xbf\xe9\xa1\xa3

    按照svn里的readme文件安装配置apache2与svn后, 启动apache2服务的时候 出现下面的问题 Cannot load C:/Program Files/Apache Software ...