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数据集下载自百度地图。

Python
import <span class="wp_keywordlink_affiliate"><a href="https://www.168seo.cn/tag/pandas" title="View all posts in pandas" target="_blank">pandas</a></span> as pd filepath = r'C:/Users/lenovo/Desktop/20180108-百度地图/20180108-百度地图/data.csv' df = pd.read_csv(filepath) #为了方便,我只显示三行,其实结果并不是这样子 print(df) 检测下数据格式 #检测下数据格式是否为DataFrame print(type(df)) #输出 class '<span class="wp_keywordlink_affiliate"><a href="https://www.168seo.cn/tag/pandas" title="View all posts in pandas" target="_blank">pandas</a></span>.core.frame.DataFrame
1
2
3
4
5
6
7
8
9
10
11
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前后几行

Python
#展示前两条记录(根据需要显示条数) 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#展示前两条记录(根据需要显示条数)
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 取一列数据

Python
#这里我们一列,如取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])
1
2
3
4
5
6
7
8
9
#这里我们一列,如取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取一行数据

Python
#这里我们一列,如取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])
1
2
3
4
5
6
7
8
#这里我们一列,如取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 ] )

五、取某一单元格数据
取第一行第一列。df.ix[0,0] 第三行第七列。df.ix[2,6]

Python
subset含有一个或多个列名的的listde="true" ]#这里我们一列,如取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])
1
2
3
4
5
6
7
8
   subset含有一个或多个列名的的 listde = "true"    ] #这里我们一列,如取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 ] )

六、缺失值处理
缺失值一般标记为NaN,处理办法如下

6.1按照行进行缺失值处理

Python
#为了显示方便,只显示前五行。 #axis=1表示按照行方向处理NAN df.dropna(axis=1) 6.2按照列进行缺失值处理 #按照列处理缺失值(为显示方便,只显示前5行) df.dropna(axis=0) #对指定列进行缺失值处理 df.dropna(axis=0,subset=['Sex','Age'])
1
2
3
4
5
6
7
8
#为了显示方便,只显示前五行。
#axis=1表示按照行方向处理NAN
df . dropna ( axis = 1 )
6.2按照列进行缺失值处理
#按照列处理缺失值(为显示方便,只显示前5行)
df . dropna ( axis = 0 )
#对指定列进行缺失值处理
df . dropna ( axis = 0 , subset = [ 'Sex' , 'Age' ] )

七、归一化处理
数据集中,不同的列的数据可能在不同量级,如果直接进行分析。模型会认为数字大的影响力大,数字小的影响力小。 最终结果可能导致量级小的变量被剔除出模型。因此需要将数据归一化,变成同一量级的数据,这就是归一化操作。 在这里我们只对一列操作下,其余列也需要操作,但为了方便,这里只写一列的归一化处理。

处理步骤:

Python
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']
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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' ]

八、排序

Python
df.sort_values(col,inplace,ascending) col 对col列进行排序 inplace 布尔型值,是否原地操作。 True时,操作结果覆盖掉原数据,原数据被修改 False时,新建一个新数据,原数据未被修改 ascending 布尔型值。升序降序。 False降序,True升序 #对Age列进行降序操作,不修改原始数据 df.sort_values('Age',inplace=False,ascending=False)
1
2
3
4
5
6
7
8
9
df . sort_values ( col , inplace , ascending )
col           对 col列进行排序
inplace       布尔型值,是否原地操作。
             True时,操作结果覆盖掉原数据,原数据被修改
             False时,新建一个新数据,原数据未被修改
ascending     布尔型值。升序降序。 False降序, True升序
 
#对Age列进行降序操作,不修改原始数据
df . sort_values ( 'Age' , inplace = False , ascending = False )

九、索引重新
将排序后的索引重新排序

Python
将排序后的索引重新排序 df.reset_index(drop) drop 为布尔型值,True表示修改原始数据的索引。 False保留原始数据索引序列。 df.reset_index(drop=False)
1
2
3
4
5
6
将排序后的索引重新排序
df . reset_index ( drop )
drop     为布尔型值, True表示修改原始数据的索引。
                   False保留原始数据索引序列。
 
df . reset_index ( drop = False )

十、求平均值

Python
10.1所有列的平均值信息 df.mean() 10.2 单个列的平均值 df['Age'].mean()
1
2
3
4
10.1所有列的平均值信息
df . mean ( )
10.2 单个列的平均值
df [ 'Age' ] . mean ( )

十一、矢量化操作(批量操作)
一般对如list样式的数据批量操作,需要写循环,但是这样费时费力。 pandas基于numpy,可进行矢量化操作,一行就能完成复杂的循环语句,而且运行效率还很高。

Python
#对Age列批量加10 df['Age']+10).head #对Age列批量减20 df['Age']-10
1
2
3
4
#对Age列批量加10
df [ 'Age' ] + 10 ) . head
#对Age列批量减20
df [ 'Age' ] - 10

十二、透视表

Python
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中的表格数据 andas会在网页中寻找任何符合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编码,可以在ofiice excell中看中文不乱吗 df.to_csv('data.csv',encoding='gbk')
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
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中的表格数据
andas会在网页中寻找任何符合 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编码,可以在ofiice excell中看中文不乱吗
df . to_csv ( 'data.csv' , encoding = 'gbk' )




  • zeropython 微信公众号 5868037 QQ号 5868037@qq.com QQ邮箱
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值