下一篇:Pandas—DataFrame的读取、保存、增、删、查、改
1、Pandas简介
Pandas 是Python的数据处理包,全名:Python Data Analysis Library,Pandas 是非常著名的开源数据处理库,我们可以通过它完成对数据集进行快速读取、转换、过滤、分析等一系列操作。Pandas库是基于Numpy库来创建的,Numpy主要用于矩阵操作,而Pandas主要用于数据处理。特色是:
1)支持多种数据格式,甚至包括excel和SQL数据库;
2)数据对齐,缺失数据处理,数据排序等常规数据整理操作;
3)基于标签的数据集操作,包括切片和采样等;
4)高性能的merge和join操作;
5)支持时序数据操作;
6)超高性能,核心代码基于C,实测性能远远超过等价的Java实现;
7)免费;
2、Pandas的数据结构
Pandas主要有两种重要的数据结构:Series和DataFrame。Series: 类似一个一维数组,一个Series对应DataFrame的一列DataFrame:类似一个二维数组,一个DataFrame由几个Series列构成。
(1)Series
一维数据Series 是 Pandas 中最基本的 1 维数据形式。其可以储存整数、浮点数、字符串等形式的数据。Series 的新建方法如下:
s = pandas.Series(data, index=index)
其中,data 可以是字典、numpy 里的 ndarray 对象等。index 是数据索引,索引是 pandas 数据结构中的一大特性,它主要的功能是帮助我们更快速地定位数据。
1)字典 -> Series
import pandas as pd
d = {'a' : 10, 'b' : 20, 'c' : 30}
print pd.Series(d)
a 10
b 20
c 30
dtype: int64
我们可以直接通过index=[]来设置新的索引。
d = {'a' : 10, 'b' : 20, 'c' : 30}
s = pd.Series(d, index=['b', 'c', 'd', 'a'])
print s
b 20.0
c 30.0
d NaN
a 10.0
dtype: float64
你会发现,pandas 会自动匹配人为设定的索引值和字典转换过来的索引值。而当索引无对应值时,会显示为 NaN 缺失值。
2) ndarray -> Series
ndarray 是著名数值计算包 numpy 中的多维数组。我们也可以将 ndarray 直接转换为 Series。
import pandas as pd
import numpy as np
data = np.random.randn(5) # 一维随机数
index = ['a', 'b', 'c', 'd', 'e'] # 指定索引
s = pd.Series(data, index)
print s
a 0.583529
b 1.339164
c -0.029611
d -1.331405
e 0.067889
dtype: float64
当我们需要从一维数据 Series 中返回某一个值时,可以直接通过索引完成。如print s['a']。而当我们非人为指定索引值时,Pandas 会默认从 0 开始设置索引值。
s = pd.Series
print s
0 0.583529
1 1.339164
2 -0.029611
3 -1.331405
4 0.067889
dtype: float64
除此之外,Series 是可以直接进行运算的。例如:
print 2*s
0 1.167059
1 2.678328
2 -0.059222
3 -2.662811
4 0.135778
dtype: float64
print s-s
0 0.0
1 0.0
2 0.0
3 0.0
4 0.0
dtype: float64
(2)DataFrame
DataFrame 是 Pandas 中最为常见、最重要且使用频率最高的数据结构。你可以想到它箱型为电子表格或 SQL 表具有的结构。DataFrame包括三部分信息,表头(列的名称),表的内容(二维矩阵),索引(每行一个唯一的标记)。DataFrame 可以被看成是以 Series 组成的字典。它和 Series 的区别在于,不但具有行索引,且具有列索引。DataFrame 可以用于储存多种类型的输入:
>> 一维数组、列表、字典或者 Series 字典。
>> 二维 numpy.ndarray。
>> 结构化的 ndarray。
>> 一个 Series。
>> 另一个 DataFrame。
1)通过list创建
import pandas as pd
df = pd.DataFrame([[1,2,3],[4,5,6]])
df
0 1 2
0 1 2 3
1 4 5 6
上面代表,创建了一个2行3列的表格,创建时只指定了表格的内容(通过一个嵌套的list),没有指定列名和索引。
这时列名就自动为 0,1,2 ;索引自动为数值0,1.
我们可以指定列名和索引:
df = pd.DataFrame([[1,2,3],[4,5,6]],index=['row1','row2'],columns=['c1','c2','c3'])
df
c1 c2 c3
row1 1 2 3
row2 4 5 6
2)通过numpy生成的数组创建
df3 = pd.DataFrame(np.array([[1,2],[3,4]]), columns=['col1','col2'], index=['a','b'])
print (df3)
col1 col2
a 1 2
b 3 4
3)通过字典创建
df4 = pd.DataFrame({'col1':[1,3],'col2':[2,4]},index=['a','b'])
print (df4)
col1 col2
a 1 2
b 3 4
注意:创建DataFrame对象的数据可以为列表,数组和字典,列名和索引为列表对象。
4)DataFrame的状态信息
获取数据的行数、获取形状
len(df) # 返回DataFrame的行数
df.shape # 返回DataFrame的形状,一个二元组(a,b),a为行数,b为列数
显示索引、列、矩阵数据
df.index # 获取行索引
df.columns # 获取列索引
df.values # 获取表中的值
修改列名:
a = pd.DataFrame({'A':[1,2,3], 'B':[4,5,6], 'C':[7,8,9]})
print a
A B C
0 1 4 7
1 2 5 8
2 3 6 9
a.rename(columns={'A':'a', 'B':'b', 'C':'c'}, inplace = True)
print a
a b c
0 1 4 7
1 2 5 8
2 3 6 9
查看DataFrame的描述信息:
DataFrame.info()
DataFrame.dtype
DataFrame.describe()