利用Python进行数据分析(三):pandas入门
pandas含有使数据清洗和分析工作变得更快更简单的数据结构和操作工具。pandas经常和其它工具一同使用,如数值计算工具NumPy和SciPy,分析库statsmodels和scikit-learn,和数据可视化库matplotlib。pandas是基于NumPy数组构建的,特别是基于数组的函数和不使用for循环的数据处理。
import pandas as pd
Series和DataFrame用的次数非常多,所以将其引入本地命名空间中会更方便。
from pandas import Series,DataFrame
一、pandas的数据结构介绍
它的两个主要数据结构:Series和DataFrame。
1、Series
Series是一种类似于一维数组的对象,它由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)组成。仅由一组数据即可产生最简单的Series:
obj=pd.Series([1,2,3,4])
obj
Out[108]:
0 1
1 2
2 3
3 4
dtype: int64
Series的字符串表现形式为:索引在左边,值在右边。由于我们没有为数据指定索引,于是会自动创建一个0到N-1(N为数据的长度)的整数型索引。你可以通过Series 的values和index属性获取其数组表示形式和索引对象。
obj.values
Out[109]: array([1, 2, 3, 4], dtype=int64)
obj.index
Out[110]: RangeIndex(start=0, stop=4, step=1)
创建的Series带有一个可以对各个数据点进行标记的索引
obj=pd.Series([1,2,3,4],index=["a","b","c","d"])
obj
Out[112]:
a 1
b 2
c 3
d 4
dtype: int64
与普通NumPy数组相比,你可以通过索引的方式选取Series中的单个或一组值:
obj[["a","b","c"]]
Out[114]:
a 1
b 2
c 3
dtype: int64
如果数据被存放在一个Python字典中,也可以直接通过这个字典来创建Series
dic={
"a":1,"b":2,"c":3}
pd.Series(dic)
Out[117]:
a 1
b 2
c 3
dtype: int64
如果只传入一个字典,则结果Series中的索引就是原字典的键(有序排列)。
可以传入排好序的字典的键以改变顺序:
sdata={
"china":20000,"usa":1000,"australia":5000,"uk":10000}
data1=pd.Series(sdata,index=["usa","China","uk","Beijing"])
data1
Out[121]:
usa 1000.0
China NaN
uk 10000.0
Beijing NaN
dtype: float64
对应的值找不到为NaN,“not a number”.
将使用缺失(missing)或NA表示缺失数据。pandas的isnull和notnull函数可用于检测缺失数据:
pd.isnull(data1)
Out[122]:
usa False
China True
uk False
Beijing True
dtype: bool
pd.notnull(data1)
Out[123]:
usa True
China False
uk True
Beijing False
dtype: bool
Series最重要的一个功能是,它会根据运算的索引标签自动对齐数据:
dict={
"Beijing":1,"Chengdu":5,"Chongqing":6,"Guangdong":1}
import pandas as pd
pd.Series(dict)
Out[3]:
Beijing 1
Chengdu 5
Chongqing 6
Guangdong 1
dtype: int64
x=pd.Series(dict)
dict2={
"Beijing":3,"Chengdu":2,"Chongqing":4,"Guangdong":2}
y=pd.Series(dict2)
x+y
Out[7]:
Beijing 4
Chengdu 7
Chongqing 10
Guangdong 3
dtype: int64
Series对象本身及其索引都有一个name属性,该属性跟pandas其他的关键功能关系非常密切。
x.name="economy"
x.index.name = "city"
x
Out[11]:
city
Beijing 1
Chengdu 5
Chongqing 6
Guangdong 1
Name: economy, dtype: int64
Series的索引可以通过赋值的方式就地修改:
x.index=["1","2","3","4"]
x
Out[13]:
1 1
2 5
3 6
4 1
Name: economy, dtype: int64
2、DataFrame
DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)。
建DataFrame的办法有很多,最常用的一种是直接传入一个由等长列表或NumPy数组组成的字典:
data={
"state":["bj","sh","cq","cd"],"year":[2000,2001,2002,2004],"pop":[1,2,4,3]}
pd.DataFrame(data