热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

初识机器学习(pandas)

pandas初识Series定义Series可以看做一个定长的有序字典。基本任意的一维数据都可以用来构造Series对象:importpandasaspdspd.

pandas初识


  • Series

  1. 定义



Series 可以看做一个定长的有序字典。基本任意的一维数据都可以用来构造 Series 对象:

import pandas as pds=pd.Series([1,2,3,4,5,6])print(s)0 11 22 33 44 55 6se = pd.Series({'a':1,'b':2})

  1. 属性



Series 对象包含两个主要的属性:index 和 values,分别为上例中左右两列。

s = Series(data=[1,3,5,7],index = ['a','b','x','y'])sa 1b 3x 5y 7

Series 对象和它的 index 都含有一个 name 属性:

s.name = 'a_series's.index.name = 'the_index'sthe_indexa 1b 3x 5y 7Name: a_series, dtype: int64

Numpy获取Series

s = np.Series(np.random.random(5),index=list('abcde'))

可以像List一样使用Series

s[1:]s[2:3]s["a"]s["b"]s.get("e",0)#比较安全的方式

可以使用bool索引

s[s>2]

可以使用所有的ndarray运算操作


  • DataFrame

  1. 定义



DataFrame 是一个表格型的数据结构,它含有一组有序的列(类似于 index),每列可以是不同的值类型(不像 ndarray 只能有一个 dtype)。基本上可以把 DataFrame 看成是共享同一个 index 的 Series 的集合。


  1. 简单示例


data = {'state':['Ohino','Ohino','Ohino','Nevada','Nevada'],'year':[2000,2001,2002,2001,2002],'pop':[1.5,1.7,3.6,2.4,2.9]}pd.DataFrame(data)

使用Series构造DataFrame

df = pd.DataFrame({'apts':apts,'cars':cars})

使用list of dicts 来构造DataFrame

data = [{'july':99,'Han':200}]
pd.DataFrame(data)

  1. 完整构造器



DataFrame(data=None,index=None,coloumns=None)

data=[[1,2,3],[5,6,7],[11,12,13],[4,5,6],[7,8,9]]df=pd.DataFrame(data,index=['one','two','three','four','five'],columns=['year','state','pop'])

  1. 特点与操作



DataFrame 面向行和面向列的操作基本是平衡的,任意抽出一列都是 Series

//定义数据date=np.arange(12).reshape(3,4)df=pd.DataFrame(date,index=['x','y','z'],columns=['a','b','c','d'])

以下标的方式获取行,只能是序列

df[:2] a b c d x 0 1 2 3 y 4 5 6 7//注:当为df[0]时会报错

选择行,以标签名的形式,只能是序列,包含最后一个元素

df['x':'z'] a b c d x 0 1 2 3 y 4 5 6 7 z 8 9 10 11

选择列,若一列则类型为Series

df.a x 0 y 4 z 8

df['a'] x 0 y 4 z 8

df[['a','b']] a b x 0 1 y 4 5 z 8 9

选择行时

df.loc['x'] a 0 b 1 c 2 d 3

df.loc[['x','y'],['a','b']] a b x 0 1 y 4 5

df.loc['x',['a','b']]
a 0
b 1

使用位置选择

df.iloc[1:3,2:4] //取1,2行,2,3列c d
y 6 7
z 10 11

df.iloc[:,1] //第一列c
x 2
z 10

df.iloc[1,:] //取一行的所有列
a 4
b 5
c 6
d 7

混合使用标签和位置

df.ix[1] //取第一行
df.ix[:2,[‘a’,‘b’]]//取第二行,与’a’,‘b’列

使用bool参数

df[df>5]=99 df a b c d x 0 1 2 3 y 4 5 99 99 z 99 99 99 99

  1. 增删改


修改某一列

dff['a']=5
dff a b c d
1 5 1 2 3
2 5 5 6 7
3 5 9 10 11

修改某一列

df['a']=[5,6,4]dffa b c d x 5 1 2 3 y 6 5 6 7 z 4 9 10 11

添加某一列

data=[2,3,10]
dff['e']=data dff a b c e 1 5 1 2 2 2 5 5 6 3 3 5 9 10 10

删除某一列

del dff['d']
dff a b c
1 5 1 2
2 5 5 6
3 5 9 10

对columns进行排序

df2 a b c d 1 0 1 2 3 2 4 5 6 7 3 8 9 10 11 df2.sort_index(axis=1,ascending=False) d c b a 1 3 2 1 0 2 7 6 5 4 3 11 10 9 8

对index进行排序

df2.sort_index(axis=0,ascending=False) a b c d
3 8 9 10 11
2 4 5 6 7
1 0 1 2 3

对某列进行排序

df2.sort_values(by='b')a b c d
1 0 1 2 3
2 4 5 6 7
3 8 9 10 11

  1. 统计和筛选


df a b c d 1 0 1 2 3 2 4 5 6 7 3 8 9 10 11

找寻最小值

df.a.min()

筛选符合条件的行

df[df.a>=4] a b c d
2 4 5 6 7
3 8 9 10 11

index在(1,3)之间的行

f[(df.index>1) & (df.index<3)] a b c d
2 4 5 6 7

pivot_table

df.pivot_table(index&#61;"year",values&#61;"state",aggfunc&#61;np.mean)
//或
df.pivot_table(index&#61;"year",values&#61;[&#39;state&#39;,&#39;pop&#39;],aggfunc&#61;np.mean)

apply

def plus(df,n,m):
df[&#39;c&#39;] &#61; (df[&#39;a&#39;]&#43;df[&#39;b&#39;]) * m
df[&#39;d&#39;] &#61; (df[&#39;a&#39;]&#43;df[&#39;b&#39;]) * n
return df
list1 &#61; [[1,3],[7,8],[4,5]]
df1 &#61; pd.DataFrame(list1,columns&#61;[&#39;a&#39;,&#39;b&#39;])
df1 &#61; df1.apply(plus,axis&#61;1,args&#61;(2,3,))
print(df1)
//默认情况下 将表格中的每列传入方法中&#xff0c;此处将每行传入方法中

quantile
获取分位数

qcut
等平分组

diff
参数理解

  • 分组

  1. 创建数据

    import numpy as npimport pandas as pddf &#61; pd.DataFrame({&#39;key1&#39;:[&#39;a&#39;,&#39;a&#39;,&#39;b&#39;,&#39;b&#39;,&#39;a&#39;],&#39;key2&#39;:[&#39;one&#39;,&#39;two&#39;,&#39;one&#39;,&#39;two&#39;,&#39;one&#39;],&#39;data1&#39;:np.random.randn(5),&#39;data2&#39;:np.random.randn(5),&#39;data3&#39;:np.random.randn(5),&#39;data4&#39;:np.random.randn(5)})

  2. 使用Series或Series序列来进行groupby

    #使用Series进行分组dg1 &#61; df.groupby(df.key1,as_index&#61;True)#使用Series序列进行分组dg2 &#61; df.groupby([df.key1,df.key2],as_index&#61;True)

  3. 使用列名或列名列表进行分组

    #使用列名dg3 &#61; df.groupby(&#39;key1&#39;,as_index&#61;True)dg3.first()#使用列名列表dg4 &#61; df.groupby([&#39;key1&#39;,&#39;key2&#39;],as_index&#61;True)dg4.first()

  4. 使用外部数据进行分组

    years &#61; np.array([2005,2005,2006,2005,2006])dg5 &#61; df.groupby(years)

  5. 使用字典进行groupby

    #行向mapping &#61; {0:&#39;one&#39;,1:&#39;one&#39;,2:&#39;one&#39;,3:&#39;two&#39;,4:&#39;two&#39;}dg6 &#61;df.groupby(mapping)#列向mapping &#61; {&#39;data1&#39;:1,&#39;data2&#39;:2,&#39;data3&#39;:1,&#39;data4&#39;:2}df7 &#61; df.groupby(mapping,axis&#61;1)df7.first()

  6. 使用函数进行分组

    #列向分组mapping &#61; {&#39;data1&#39;:1,&#39;data2&#39;:2,&#39;data3&#39;:1,&#39;data4&#39;:2}df7 &#61; df.groupby(mapping,axis&#61;1)df7.first()#行向分组def fun(x):if x<2 :return 1else :return 2df8 &#61; df.groupby(fun)

  7. 使用索引分组

    columns &#61; pd.MultiIndex.from_arrays([[&#39;US&#39;,&#39;US&#39;,&#39;US&#39;,&#39;JP&#39;,&#39;JP&#39;],[1,3,5,1,3]],names &#61; [&#39;cty&#39;,&#39;tenor&#39;])df &#61; DataFrame(np.random.randn(4,5),columns&#61;columns)print(df)df.groupby(level&#61;&#39;cty&#39;,axis&#61;1)

  8. as_index

    f &#61; pd.DataFrame({&#39;age&#39;:[10,20,10,30,20,20,30],&#39;name&#39;:[&#39;zhao&#39;,&#39;qian&#39;,&#39;sun&#39;,&#39;li&#39;,&#39;zhao&#39;,&#39;qian&#39;,&#39;qian&#39;]},index &#61; [1,2,3,4,5,6,7])#将name设置为分组的索引fg &#61; f.groupby(&#39;name&#39;,as_index&#61;True)

  9. 获取分组属性

    #获取分组信息fg.groups#获取某个分组的信息fg.get_group(&#39;第一组&#39;)

  10. 迭代分组

    for name,group in group_by_name:print(name)print(group)


  • aggregate操作

  1. 构造数据集

    import pandas as pdimport numpy as np%matplotlib inlinesalaries &#61; pd.DataFrame({&#39;Name&#39;: [&#39;July&#39;, &#39;Zewei&#39;, &#39;Zewei&#39;, &#39;Han&#39;, &#39;July&#39;, &#39;July&#39;, &#39;Zewei&#39;, &#39;July&#39;],&#39;Year&#39;: [2016,2016,2016,2016,2017,2017,2017,2017],&#39;Salary&#39;: [10000,2000,4000,5000,18000,25000,3000,4000],&#39;Bonus&#39;: [3000,1000,1000,1200,4000,2300,500,1000]})

  2. 使用聚合

    group_by_name &#61; salaries.groupby(&#39;Name&#39;,sort&#61;True)#直接使用count函数group_by_name.count()#使用agg方法传入函数group_by_name.agg(np.size)#使用多个函数group_by_name.agg([min,max])#对不同的列使用不同的函数group_by_name.agg({&#39;Year&#39;:min,&#39;Salary&#39;:max})


  • transform操作

  1. 数据

    使用与上文相同的数据

  2. 使用对应的函数

    zscore &#61; lambda x:(x-x.mean())/x.std()transformed &#61; group_by_name.transform(zscore)transformed.head()


  • apply操作

  1. 数据

    使用上文相同的数据

  2. 进行对应的操作

    #使用聚合函数group_by_name.apply(sum)#使用非聚合函数group_by_name.apply(lambda x:(x-x.mean())/x.std())


  • filter操作

    group_by_name.filter(lambda x : len(x)>3 )

  • 表格拼接之Concat


  1. 创建数据

    import pandas as pdimport numpy as npdf1 &#61; pd.DataFrame({&#39;apts&#39;: [55000, 60000],&#39;cars&#39;: [200000, 300000],},index &#61; [&#39;Shanghai&#39;, &#39;Beijing&#39;])df2 &#61; pd.DataFrame({&#39;cars&#39;: [150000, 120000],&#39;apts&#39;: [25000, 20000],},index &#61; [&#39;Hangzhou&#39;, &#39;Najing&#39;])df3 &#61; pd.DataFrame({&#39;apts&#39;: [30000, 10000],&#39;cars&#39;: [180000, 100000],&#39;mar&#39;: [180000, 100000]},index &#61; [&#39;Guangzhou&#39;, &#39;Chongqing&#39;])

  2. 全部使用默认值进行连接

    pd.concat([df1,df2,df3],sort &#61; True)

  3. 重新计算索引并标记为0~n-1&#xff08;此时会使keys参数失效&#xff09;

    pd.concat([df1,df2,df3],ignore_index&#61;True)

  4. 使用keys参数

    re &#61; pd.concat([df1,df2,df3],sort&#61;True,keys&#61;[&#39;x&#39;,&#39;y&#39;,&#39;z&#39;])

  5. 当使用keys参数后可以使用以下索引方式

    re.loc[&#39;x&#39;,&#39;cars&#39;]re.loc[(&#39;x&#39;,&#39;shanghai&#39;),&#39;cars&#39;]

  6. 列向连接

    df4 &#61; pd.DataFrame({&#39;salaries&#39;: [10000, 30000, 30000, 20000, 15000]},index &#61; [&#39;Suzhou&#39;, &#39;Beijing&#39;, &#39;Shanghai&#39;, &#39;Guangzhou&#39;, &#39;Tianjin&#39;])pd.concat([re, df4], axis&#61;1, sort&#61;False)

  7. 可以指定连接方式

    pd.concat([re, df4], axis&#61;1, join&#61;&#39;inner&#39;)#也可指定为outer

  8. 使用join_axes来构造出left_join right_join的效果

    r2&#61;pd.concat([re, df4], axis&#61;1,sort&#61;False,join_axes&#61;[re.index])r3&#61; pd.concat([re, df4], axis&#61;1,sort&#61;False,join_axes&#61;[df4.index])r4&#61; pd.concat([re, df4], axis&#61;1,sort&#61;False)

  9. Series和DataFrame可以被一起concatenate


  • 表格拼接之append

append是限制axis&#61;0 的concatenate


  • 表格拼接之Merge

  1. 数据

    df1 &#61; pd.DataFrame({&#39;apts&#39;: [55000, 60000, 58000],&#39;cars&#39;: [200000, 300000,250000],&#39;city&#39;: [&#39;Shanghai&#39;, &#39;Beijing&#39;,&#39;Shenzhen&#39;]})df4 &#61; pd.DataFrame({&#39;salaries&#39;: [10000, 30000, 30000, 20000, 15000],&#39;city&#39;: [&#39;Suzhou&#39;, &#39;Beijing&#39;, &#39;Shanghai&#39;, &#39;Guangzhou&#39;, &#39;Tianjin&#39;]})

  2. 使用简单连接

    result &#61; pd.merge(df1, df4, on&#61;&#39;city&#39;)#默认使用内链接

  3. 复杂连接

    #使用外连接&#xff0c;也存在 left right等连接result &#61; pd.merge(df1, df4, on&#61;&#39;city&#39;, how&#61;&#39;outer&#39;)

  4. 使用索引完成连接

    df1 &#61; pd.DataFrame({&#39;apts&#39;: [55000, 60000, 58000],&#39;cars&#39;: [200000, 300000,250000]},index&#61;[&#39;Shanghai&#39;, &#39;Beijing&#39;,&#39;Shenzhen&#39;])df4 &#61; pd.DataFrame({&#39;salaries&#39;: [10000, 30000, 30000, 20000, 15000]},index&#61;[&#39;Suzhou&#39;, &#39;Beijing&#39;, &#39;Shanghai&#39;, &#39;Guangzhou&#39;, &#39;Tianjin&#39;])

    #使用join完成
    df1.join(df4)
    #使用merge
    pd.merge(df1, df4, left_index&#61;True, right_index&#61;True, how&#61;‘outer’)

  5. 指定索引

    pd.merge(df1,df2,left_on&#61;[&#39;cars&#39;],right_on&#61;[&#39;cars&#39;],how&#61;&#39;outer&#39;)


  • 表格操作

rename

ratings_mean &#61; ratings.groupby("movieId").agg({"rating": np.mean, "timestamp": "count"}).rename(columns&#61;{"timestamp": "count"})

reindex

a&#61; np.arange(10).reshape(2,5)s &#61; pd.DataFrame(data&#61;a,columns&#61;[&#39;a&#39;,&#39;b&#39;,&#39;c&#39;,&#39;d&#39;,&#39;e&#39;])s.reindex(index &#61; [1,0],columns&#61;[&#39;e&#39;,&#39;a&#39;,&#39;b&#39;,&#39;c&#39;,&#39;d&#39;])

判断是否为空(填充内容)

apts.notnull()
Beijing True
Guangzhou True
Hangzhou True
Shanghai True
Shenzhen True
Suzhou False
Name: price, dtype: boolapts.isnull()
Beijing False
Guangzhou False
Hangzhou False
Shanghai False
Shenzhen False
Suzhou True
Name: price, dtype: bool

fillna

  • 定义

    a&#61; np.arange(15).reshape(3,5)s &#61; pd.DataFrame(data&#61;a,columns&#61;[&#39;a&#39;,&#39;b&#39;,&#39;c&#39;,&#39;d&#39;,&#39;e&#39;])s.iloc[1,[0,1]]&#61;np.nan

  • 直接填充

    fillna(0)

  • 使用前一个值填充

    s.fillna(method&#61;&#39;pad&#39;)

  • 使用后面的值填充

    s.fillna(method&#61;&#39;bfill&#39;)

reset_index

将索引列还原为普通列

drop

a&#61; np.arange(15).reshape(3,5)
s &#61; pd.DataFrame(data&#61;a,columns&#61;[&#39;a&#39;,&#39;b&#39;,&#39;c&#39;,&#39;d&#39;,&#39;e&#39;])
#删除索引为0&#xff0c;1的行
s.drop([0,1])
#删除列
s.drop(&#39;a&#39;,axis&#61;1)

dropna

默认滤除所有包含NaN&#xff1a;

s.dropna()

传入how &#61; ‘all’ 滤除全为NaN的行

s.dropna(how&#61;&#39;all&#39;)

删除全为NaN的列

s.dropna(how&#61;&#39;all&#39;,axis&#61;1)

  1. csv文件读写



  • 基本操作

    pokemon&#61;pd.read_csv("文件路径")pokemon.head()#查看前几行数据pokemon.describe()#数据描述


#查看数据缺失
pokemon.isnull()


#查看缺失列
pokemon.isnull().any()


#补足
pokenmon.loc[pokemon[‘Type 2’].isnull(),‘Type 2’’]&#61;0


补足数据时常用的方法


  • isnull

举例


  • notnull

举例


  • 读出

    pokenmon.to_csv(“文件路径”)


推荐阅读
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
  • 本文介绍了在Python张量流中使用make_merged_spec()方法合并设备规格对象的方法和语法,以及参数和返回值的说明,并提供了一个示例代码。 ... [详细]
  • GPT-3发布,动动手指就能自动生成代码的神器来了!
    近日,OpenAI发布了最新的NLP模型GPT-3,该模型在GitHub趋势榜上名列前茅。GPT-3使用的数据集容量达到45TB,参数个数高达1750亿,训练好的模型需要700G的硬盘空间来存储。一位开发者根据GPT-3模型上线了一个名为debuid的网站,用户只需用英语描述需求,前端代码就能自动生成。这个神奇的功能让许多程序员感到惊讶。去年,OpenAI在与世界冠军OG战队的表演赛中展示了他们的强化学习模型,在限定条件下以2:0完胜人类冠军。 ... [详细]
  • 基于词向量计算文本相似度1.测试数据:链接:https:pan.baidu.coms1fXJjcujAmAwTfsuTg2CbWA提取码:f4vx2.实验代码:imp ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • 本文讨论了如何在codeigniter中识别来自angularjs的请求,并提供了两种方法的代码示例。作者尝试了$this->input->is_ajax_request()和自定义函数is_ajax(),但都没有成功。最后,作者展示了一个ajax请求的示例代码。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • Python使用Pillow包生成验证码图片的方法
    本文介绍了使用Python中的Pillow包生成验证码图片的方法。通过随机生成数字和符号,并添加干扰象素,生成一幅验证码图片。需要配置好Python环境,并安装Pillow库。代码实现包括导入Pillow包和随机模块,定义随机生成字母、数字和字体颜色的函数。 ... [详细]
  • [转载]从零开始学习OpenGL ES之四 – 光效
    继续我们的iPhoneOpenGLES之旅,我们将讨论光效。目前,我们没有加入任何光效。幸运的是,OpenGL在没有设置光效的情况下仍然可 ... [详细]
  • 应用场景当遇到数据分类,聚类,预测等场景问题,普通的SQL方法无法解决,需要借助算法这件武器,比如聚类算法,分类算法,预测算法等等,但是手动去研究一个算法比较吃力,有没有那种工具, ... [详细]
  • 详解 Python 的二元算术运算,为什么说减法只是语法糖?[Python常见问题]
    原题|UnravellingbinaryarithmeticoperationsinPython作者|BrettCannon译者|豌豆花下猫(“Python猫 ... [详细]
  • 文章目录前言pandas主要分为如下几个阶段:表格数据操作:增删改查实现多个表格的处理数据清洗操作:缺失值、重复值、异常值、数据标准化、数 ... [详细]
  • SQL Server 2008 到底需要使用哪些端口?
    SQLServer2008到底需要使用哪些端口?-下面就来介绍下SQLServer2008中使用的端口有哪些:  首先,最常用最常见的就是1433端口。这个是数据库引擎的端口,如果 ... [详细]
author-avatar
书友59418658
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有