带你看懂pandas中的两种数据结构

Pandas是基于Numpy的一种工具,这个工具是为了解决数据分析任务而建立的,pandas归入了大量的库和一些标准的数据模型,提供了高效的操做大型数据集所需的工具,pandas提供了大量能使咱们快速便捷的处理数据的函数和方法。Pandas是使Python成为强大而高效的数据分析环境的重要因素之一。另外html

在pandas包含了三种数据结构:html5

  • Series
  • DataFrame
  • Time-series

下面咱们就介绍一下Series和DataFrame这两种经常使用的数据结构,Time-series时间序列,咱们后期会专门在开一篇文章仔细的去讲述一下。python

1、Seriesmysql

Series是一维数组,与Numpy中的一维array相似。两者与Python基本的数据结构List也很相近,其区别是:List中的元素能够是不一样的数据类型,而Array和Series中则只容许存储相同的数据类型,这样能够更有效的使用内存,提升运算效率,而且series能够运用Ndarray或字典的几乎全部索引操做和函数,融合了字典和ndarray的优势。sql

一、series索引数据库

Series类型是由一组数据及与之相关的数据索引组成编程

自动索引:不建立系统自动建立索引。json

自定义索引:自定义索引,建立完自定义索引后,自动索引也在。数组

Series是一维带’标签’数组,它的基本操做相似Ndarray和字典,genuine索引对齐。数据结构

二、建立对象

Series(列表/元组/字典/标量/Numpy数组/range等序列,<index=param1>)不写index会自动建立索引,若是写定指定索引,index能够是列表,numpy数组。

列子以下:

  • 参数:列表或元组,并分别建立自动索引和手动索引(自动索引还在)

image

能够看出index('a', 'b', 'c', 'd', 'e')分别对应1,3,5,7,9

  • 参数:字典,并分别建立自动索引和手动索引

字典的key做为索引,value做为值

image

若是字典中在设置index,就至关因而从字典中挑选数据

image

image

  • 参数:标量

image

image

Index能够是列表,元组,range序列,numpy数组

image

  • 参数:numpy数组(ndarray)

image

三、属性

Series的主要属性包括index和values两部分

属性

说明

Values

获取数据,底层存储的是numpy数组

Index

获取索引

还有两个不过重要的属性

Name

Series的name(在DataFrame中没有Name属性)

Index.name

索引的name

还有一些相似于numpy数组的属性,好比dtype和shape等。

下面是一些属性的列子:

image

3.1Values值

image

3.2Index索引

image

3.3Name,series的名字

image

3.4Index,series索引的名字

image

四、选取

  • series类型的选取相似numpy数组,索引的方式相同,采用[],numpy中的运算和操做可用于series类型,能够经过自定义索引的列表进行切片也能够经过自动索引进行切片,若是存在自定义索引,则一同被切片

image

  • series类型的操做相似于python字典类型:

经过自定义索引访问,保留字in操做,使用.get()方法

image

PS:.get(key,default=none)函数返回指定键的值,若是值再也不字典中则返回默认值(默认为空),key是要查找的键,default是设置的默认值。

五、series类型对齐操做

Series+series,series类型在运算中会自动对齐不一样索引的数据。

  • Series类型对齐

image

六、获取,设置,删除等

6.1获取值

因为具有numpy数组和字典的特性,series能够像使用numpy数组的索引切片或用字典的get同样来用。

image

6.2设置/修改:索引和切片

image

  • 将a修改成11

image

  • 将b,c修改成100

image

  • 将b,c改成101和102

image

  • 将b,c改成103和104(注意此次用的是逗号,表示单独挑选出了b和c,上面是b到c)

image

6.3删除

drop方法(结果改变)和pop(像字典的用法,改变自身)

  • Drop:

image

  • 删除a,结果改变

image

  • 删除b和d

image

  • Pop:

image

2、DataFrame

DataFrame类型由公用相同索引的一组序列组成,是一个表格型的数据类型,每列值类型能够不一样。DataFrame即有行索引也有列索引:

  • Index axis = 0(默认)
  • Column axis = 1(默认)

DataFrame经常使用于表达二维数据,但能够表达多维数据,基本操做相似于Series,依据行列索引

一、DataFrame的建立

1.一、从内存中建立

语法:

DataFrame(字典/列表/numpy数组/DataFrame,index=0,columns=1)也能够在建立的时候不指定index和columns,在建立完后单独设置这两个属性。

经常使用的参数:

  • 字典:key做为列名,value做为该列的值。
  • 列表:做为值
  • Numpy数组:做为值

例子:

image

  • 列表

image

手动建立行索引和列索引,方法1:建立的时候就设置好行列索引

image

手动建立行列索引,方法2:建立的时候设置自动索引,以后在修改

image

  • 二维numpy数组

手动输入数组

image

使用方法生成数组

image

  • 字典(key是列名,value能够是数据,也能够是series类型)

手动建立列索引,行索引自动建立

image

手动建立列索引,手动建立行索引

image

1.二、从文件中建立

DataFrame能够从文件中建立:

文件第一行默认做为列索引(columns),默认为没有行索引,能够经过indx_dol参数设置第1列或前几行做为行索引。若是第一行不做为列索引,设置header=none。

文件编码为utf-8,能够经过参数encoding设置编码。

方式

做用

pd.read_csv(filename)

从CSV文件导入数据, 文件是逗号分隔。

pd.read_table(filename,<sep='t'>)

从限定分隔符的文本文件导入数据,默认是 tab

pd.read_excel(filename)

从Excel文件导入数据

pd.read_sql(query, connection_object)

从SQL表/库导入数据

pd.read_json(json_string)

从JSON格式的字符串导入数据

pd.read_html(url)

解析URL、 字符串或者HTML文件, 抽取其中的tables表格

pd.read_clipboard()

从你的粘贴板获取内容, 并传给read_table()

下面咱们就将上面的这么多方法一个个演示一遍,文章中用的这些数据能够本身生成对应格式的就能够了,这个是不影响的,只要本身掌握了这些知识就好。

image

  1. Pd.read_csv(filename):从CSV文件导入数据,文件是逗号分隔。
  • 编码是utf-8

image

  • 编码是gbk

image

读取的时候,能够带行索引,用index_col=列

image

  • 不把第一行做为列索引(在有些状况下,文件中所有都是数据)

image

2)pd.read_table(filename)

image

查看DataFrame的信息http://df.info()

image

3) pd.read_excel(filename):从Excel文件中导入数据

image

4) pd.read_sql(query, connection_object):从SQL表/库导入数据

SQLAlchemy是python编程语言下的一款ORM框架,该框架创建在数据库API上,使用关系对象映射进行数据库操做,简言之即是:将对象转换成SQL

首先导入两个模块,链接数据库建议用sqlalchemy,使用pymysql可能会出问题

image

Sqlalchemy.create(‘mysql+pymysql://用户名:用户名密码@localhost:编号/数据库名称’)

不清楚用户名和编号的可使用mysql workbench查看

image

image

将文件写入到数据库中

image

image

Test是要在数据库中建立的表名,表示的意思是将df的数据传入到数据库lianxi下的表test中

5) pd.read_json(json_string)

image

6) pd.read_html(url)

首先要安装html5lib,pip install html5lib

image

7) pd.read_clipboard():从剪切板导入数据

首先复制一段文字

而后运行代码

image

二、写入文件

写入数据后,前往输入路径下查看文件

方式

做用

df.to_csv(filename)

导出数据到CSV文件

df.to_excel(filename)

导出数据到Excel文件

df.to_sql(table_name, connection_object)

导出数据到SQL表

df.to_json(filename)

以Json格式导出数据到文本文件

image

1)第一种方式:将行索引和列索引肉写入到文件

  • df.to_csv(filename):将文件导出到CSV文件中

image

  • df.to_excel(filename):导出数据到Excel文件

image

  • df.to_json(filename):以Json格式导出数据到文本文件

image

2)第二种方式:行索引不写入

image

3)第三种方式:行和列索引都不写入

image

三、DataFrame的属性

属性

说明

Values

Index

行索引

Columns

列索引

Index.name

行索引名字

Columns.name

列索引名字

其余属性:dtypes,shape等,能够用numpy数组等等大部分属性

image

  • 查看自身的属性(重要):值,行索引,列索引

image

  • 查看自身属性(不重要):列索引名字,行索引名字

image

  • 查看其余属性:可使用ndarray的属性

image

四、DataFrame的函数和方法

4.一、取值和修改(索引,切片,ix,loc,iloc)

DataFrame的取值和修改应该从三个层次考虑:行列,区域,单元格。每一个层次都有其对应的方法:

行列df[],df.ix

区域df.ix[]

单元格df.ix

其中ix官方推荐使用iloc和loc代替

loc和iloc的用法和ix基本同样,只是loc参数用手动索引,iloc用自动索引,ix混用

image

取行:

image

取列:

image

五、其余函数或方法

5.1查看数据

  • df.head(n): 查看DataFrame对象的前n行

image

  • df.tail(n): 查看DataFrame对象的最后n行

image

  • df.shape: 查看行数和列数

image

image

  • df.describe(): 查看数值型列的汇总统计

image

  • s.value_counts(dropna=False): 查看Series对象的惟一值和计数

image

image

  • df.apply(函数):把df应用于某个函数

image

5.二、清洗数据

image

  • df.columns = ['a','b','c','d','e']: 重命名列名

image

  • df.isnull(): 检查DataFrame对象中的空值, 并返回一个Boolean数组

image

  • df.notnull(): 检查DataFrame对象中的非空值, 并返回一个Boolean数组

image

  • df.dropna(): 删除全部包含空值的行

image

  • df.dropna(axis=1): 删除全部包含空值的列

image

df.dropna(axis=1,thresh=n): 删除全部小于n个非空值的列

image

  • df.fillna(x): 用x替换DataFrame对象中全部的空值

image

  • s.fillna(s.mean()): 用某列的均值来填充某列的空值

image

  • s.astype(float): 将Series中的数据类型更改成float类型

image

  • s.replace(1,'one'): 用‘one’ 代替全部等于1的值

image

  • df.rename(columns=lambda x: x + '1'): 批量更改列名

image

  • df.rename(columns={'old_name': 'new_ name'}): 选择性更改列名

image

  • df.set_index('column_one'): 更改索引列

image

  • df.rename(index=lambda x: x + 1): 批量重命名索引

image

5.三、数据规整

  • df[df[col] > 0.5]: 选择col列的值大于0.5的行
  • df.sort_values(col1): 按照列col1排序数据, 默认升序排列
  • df.sort_values(col2, ascending=False): 按照列col1降序排列数据
  • df.sort_values([col1,col2], ascending=[True,False]):先按列col1升序排列, 后按col2降序排列数据
  • df.groupby(col): 返回一个按列col进行分组的Groupby对象
  • df.groupby([col1,col2]): 返回一个按多列进行分组的Groupby对象
  • df.groupby(col1).agg(np.mean): 返回按列col1分组的全部列的均值
  • df.groupby(col1).sum(): 返回按列col1分组的全部列的和
  • df.groupby(col1).mean()[col2]: 返回按列col1进行分组后, 列col2的均值
  • data.apply(np.mean): 对DataFrame中的每一列应用函数np.mean
  • data.apply(np.max,axis=1): 对DataFrame中的每一行应用函数np.max
  • df.pivot_table(index=col1, values=[col2,col3], aggfunc=np.mean):建立一个按列col1进行分组, 并计算col2和col3各自均值的数据透视表
  • pd.crosstab(df.col1, df.col2): 按照指定的行(col1)和列(col2)统计分组频数

5.四、数据合并

  • df1.append(df2): 将df2中的行添加到df1的尾部

image

  • pd.concat([df1, df2],axis=0):将df2中的行添加到df1的底部(axis=1的时候将df2的列添加到df1的尾部)

image

5.五、数据统计

  • df.describe(): 查看数据值列的汇总统计

image

  • df.mean(): 返回全部列的均值

image

  • df.corr(): 返回列与列之间的相关系数

image

  • df.count(): 返回每一列中的非空值的个数

image

  • df.max(): 返回每一列的最大值

image

  • df.min(): 返回每一列的最小值

image

  • df.median(): 返回每一列的中位数

image

  • df.std(): 返回每一列的标准差

image

相关文章
相关标签/搜索