1. Series相当于数组numpy.array类似
Series 它是有索引,如果我们未指定索引,则是以数字自动生成。
obj=Series([4,7,-5,3])
print obj
#输出结果如下:
0 4
1 7
2 -5
3 3
如果数据被存在一个python字典中,也可以直接通过这个字典来创建Series.
sdata{'Ohio':35000,'Texax':71000,'Oregon':16000,'Utah':5000}
obj3=Series(sdata)
print obj3
#输出结果如下:
#Ohio 35000
#Oregon 16000
#Texax 71000
#Utah 5000
取值
print obj.values
#[ 4 7 -5 3]
根据索引取值
obj2=Series([4,7,-5,3],index=['d','b','a','c'])
print obj2['a'] #输出结果:-5
2.1 Series.order()进行排序,而DataFrame则用sort或者sort_index
2.2 Series使用isnull来检测是否缺失数据
print pd.isnull(obj4)
#输出结果如下:
#California True
#Ohio False
#Oregon False
#Texax False
#dtype: bool
2.3 Series最重要的一个功能是:它在算术运算中会自动对齐不同索引的数据。
print obj3,obj4
#Ohio 35000
#Oregon 16000
#Texax 71000
#Utah 5000
#dtype: int64
#
#California NaN
#Ohio 35000.0
#Oregon 16000.0
#Texax 71000.0
#dtype: float64
print obj3+obj4
#California NaN
#Ohio 70000.0
#Oregon 32000.0
#Texax 142000.0
#Utah NaN
#dtype: float64
2.4 Series的索引可以通过赋值的方式就地修改
obj2.index=['Bob','Steven','Jeff','Ryan']
print obj2
#输出结果如下:
# Bob 4
# Steven 7
# Jeff -5
# Ryan 3
# dtype: int64
obj2['Bob']=15
print obj2
#输出结果如下:
# Bob 15
# Steven 7
# Jeff -5
# Ryan 3
# dtype: int64
print obj2['Bob'].values #没有这种表示法,报错。因为类似字典取值,直接取键值即可
DataFrame相当于有表格,有行表头和列表头
a=pd.DataFrame(np.random.rand(4,5),index=list("ABCD"),columns=list('abcde'))
构建DataFrame 的方法很多,最常用的一种是直接传入一个由等长列表或者Numpy数组组成的字典
import numpy as np
from numpy import random
import matplotlib.pyplot as plt
from numpy.linalg import inv,qr
from pandas import Series,DataFrame
import pandas as pd
data={'state':['Ohio','Ohio','Ohio','Nevada','Nevada'],
'year':[2000,2001,2002,2001,2002],
'pop':[1.5,1.7,3.6,2.4,2.9]}
frame=DataFrame(data)
print (frame)
输出结果为
#year state pop
#0 2000 Ohio 1.5
#1 2001 Ohio 1.7
#2 2002 Ohio 3.6
#3 2001 Nevada 2.4
#4 2002 Nevada 2.9
5.1 增加列或修改列
a['f']=[1,2,3,4]
5.2 增加行或修改行
a.ix['D']=10
S=pd.DataFrame(np.random.rand(4,6),index=list('EFGH'),columns=list('abcdef'))
a=a.append(S)
a=a.drop(['C','D']) #删除'C'行和'D'
a=a.drop('a',axis=1) #删除'a'列,
axis=0表示行,axis=1表示列
5.5 缺省值处理
a.iloc[2,3]=None #取第三行第4列值设为None
a.iloc[4,0]=None #取第五行第1列值设为None
a=a.fillna(5) #缺省值处(即NaN处填充为5)
5.6 缺省值去行即有缺省值的把这一行都去掉
a.iloc[2,3]=None
a.iloc[4,0]=None
a=a.dropna() #删除缺省值为NaN的行
5.7 读取excel,适当改动后,保存到excel中
e1=pd.read_excel('test.xlsx',sheetname='Sheet1')
e1.columns=['class','no','name','sex','dormitory','phonenumber']
print(e1)
print(e1.ix[2])
print(e1['class'])
print(e1.sex)
5.8 可将取出的数据处理,处理完后再保存到excel中去
e2=pd.read_excel('test_copy.xlsx',sheetname='Sheet1',names='table1',header=None)
e2.columns=['a','b','c','d']
print(e2)
e2.to_excel('test_write.xlsx',header=False,index=False)
5.9 输出列的索引
print frame2.columns
#输出结果如下:
#Index([u’year’, u’state’, u’pop’, u’debt’], dtype=‘object’)
6.1 类似字典标记的方式或属性的方式,可以将DataFrame的列获取为一个Series.
print frame2[‘state’] #取出列索引为state的列的数据
#输出结果如下:
#one Ohio
#two Ohio
#three Ohio
#four Nevada
#five Nevada
#Name: state, dtype: object
print frame2.year
#输出结果如下:
#one 2000
#two 2001
#three 2002
#four 2001
#five 2002
#Name: year, dtype: int64
6.2 返回的Series拥有原DataFrame相同的索引,且其name属性也已经被相应地设置好了。
行也可以通过位置或名称的方式进行获取
比如用索引字段ix,ix是取行的索引
print frame2.ix[‘three’]
#输出的结果如下:
#year 2002
#state Ohio
#pop 3.6
#debt NaN
#Name: three, dtype: object
6.3 可以通过赋值的方式进行修改。
#frame2[‘debt’]=16.5 #debt列全为16.5
#print frame2
#输出结果如下:
#year state pop debt
#one 2000 Ohio 1.5 16.5
#two 2001 Ohio 1.7 16.5
#three 2002 Ohio 3.6 16.5
#four 2001 Nevada 2.4 16.5
#five 2002 Nevada 2.9 16.5
#将列表或数组赋值给某个列时,其长度必须跟DataFrame的长度相匹配。
#如果赋值的是一个Series,就会精确匹配DataFrame的索引,所有的空位都将被填上缺失值。
frame2[‘debt’]=np.arange(5.)
print frame2
#输出结果如下:
#year state pop debt
#one 2000 Ohio 1.5 0.0
#two 2001 Ohio 1.7 1.0
#three 2002 Ohio 3.6 2.0
#four 2001 Nevada 2.4 3.0
#five 2002 Nevada 2.9 4.0
二维ndarray 数据矩阵,还可以传入行标和列标
由数组、列表或元组组成的字典 每个序列会变成DataFrame的一列,所有序列的长度必须相同
Numpy的结构化/记录数组 类似于“由数组组成的字典”
由Series组成的字典 每个Series会成为一列。如果没显式指定索引,由各Series的索引会被合
并成结果的行索引
由字典组成的字典 各内层字典会成为一列。键会被合并成结果的行索引,跟“由Series组成的字典”
的情况一样
字典或Series的列表 各项将会成为DataFrame的一行。字典键或Series索引的并集将会成为DataFrame
的列标
由列表或元组组成的列表 类似于“二维ndarray”
另一个DataFrame 该DataFrame的索引将会被沿用,除非显式指定了其它索引
Numpy的MaskedArray 类似于"二维ndarray"的情况,只是掩码值在结果DataFrame会变成NA/缺失值