Pandas数据结构
一、Pandas数据结构
(1)Series (有索引的一维数组)
– 数组与标签
– 可以通过标签选取数据
– 定长的有序字典
(2)Dataframe
– 表格型数据结构
– 行索引、列索引
2、Series类似一维数组,给他输入的也都是一维数据,在没有指定索引的情况下会自动根据下标去创建索引
可以将Series看成一个有序的定长的字典

import numpy as np import pandas as pd import sys from pandas import Series, DataFrame ###pandas #Series obj = Series([4, 7, -5, 3]) obj obj.values #会直接获取到他的值 obj.index #会直接获取到他的索引 obj2 = Series([4, 7, -5, 3], index=['d', 'b', 'a', 'c']) #指定索引 obj2 obj2.index obj2['a'] obj2['d'] = 6 obj2[['c', 'a', 'd']]#同时获取多个数组 obj2[obj2 > 0] #显示结果会保留索引的值 obj2 * 2 np.exp(obj2) 'b' in obj2 #这个索引是否在obj2里面 'e' in obj2 sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000} #serice 将会通过有序进行排列, obj3 = Series(sdata) obj3 states = ['California', 'Ohio', 'Oregon', 'Texas'] obj4 = Series(sdata, index=states) #按照states提供的索引顺序去对应,没有的话就是nan obj4 pd.isnull(obj4) #检测缺失值,有缺失值返回True没有False pd.notnull(obj4)#与上面相反 obj4.isnull()#pd.isnull(obj4) obj3 obj4 obj3 + obj4 #有共同索引的部分相加,没有的部分,nan obj4.name = 'population' #修改name属性 obj4.index.name = 'state' #索引通过赋值直接修改 obj4 obj.index = ['Bob', 'Steve', 'Jeff', 'Ryan'] obj
3、Dataframe
表格行的数据结构,
含有一组有序的列,
每个列有不同的数据类型,
同一列必须一样
行索引、列索引

可以输入给DataFrame构造器的数据

设置了行列名称

标签Index


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)
frame
DataFrame(data, columns=['year', 'state', 'pop']) #
frame2 = DataFrame(data, columns=['year', 'state', 'pop', 'debt'],
index=['one', 'two', 'three', 'four', 'five'])#指定行列索引及其顺序,没有的话就是Nan
frame2
frame2.columns
frame2['state'] #获取某一列,name属性已经设置好了 = state
frame2.year #同上
frame2.ix['three'] #获取列,name属性已经设置好了 = three
frame2['debt'] = 16.5 #赋值 一列所有的数据都一样
frame2
frame2['debt'] = np.arange(5.)#赋值 跟他长度一样的数组
frame2
val = Series([-1.2, -1.5, -1.7], index=['two', 'four', 'five'])# 给指定位置添加指定的值,变成空值
frame2['debt'] = val
frame2
frame2['eastern'] = frame2.state == 'Ohio' #生成一个新列,frame2.state 生成一个行数相同的逻辑向量
frame2
del frame2['eastern'] #删除列
frame2.columns
pop = {'Nevada': {2001: 2.4, 2002: 2.9},
'Ohio': {2000: 1.5, 2001: 1.7, 2002: 3.6}} #外层的key会作为列的索引,内层的行会作为行的索引
frame3 = DataFrame(pop)
frame3
frame3.T#转至
DataFrame(pop, index=[2001, 2002, 2003])#创建时指定索引方式
pdata = {'Ohio': frame3['Ohio'][:-1],
'Nevada': frame3['Nevada'][:2]}
DataFrame(pdata)
frame3.index.name = 'year'; frame3.columns.name = 'state'
frame3
frame3.values
frame2.values
#索引对象
obj = Series(range(3), index=['a', 'b', 'c'])
index = obj.index
index
index[1:] #index 索引对象不可修改
index[1] = 'd'
index = pd.Index(np.arange(3))
obj2 = Series([1.5, -2.5, 0], index=index)
obj2.index is index
frame3
'Ohio' in frame3.columns
2003 in frame3.index
###数据读取
#读取文本格式数据
df = pd.read_csv('d:data/ex1.csv')
df
pd.read_table('d:data/ex1.csv', sep=',')
pd.read_csv('d:data/ex2.csv', header=None)
pd.read_csv('d:data/ex2.csv', names=['a', 'b', 'c', 'd', 'message'])
names = ['a', 'b', 'c', 'd', 'message']
pd.read_csv('d:data/ex2.csv', names=names, index_col='message')
parsed = pd.read_csv('d:data/csv_mindex.csv', index_col=['key1', 'key2'])
parsed
list(open('d:data/ex3.txt'))
result = pd.read_table('d:data/ex3.txt', sep='\s+')
result
pd.read_csv('d:data/ex4.csv', skiprows=[0, 2, 3])
result = pd.read_csv('d:data/ex5.csv')
result
pd.isnull(result)
result = pd.read_csv('d:data/ex5.csv', na_values=['NULL'])
result
sentinels = {'message': ['foo', 'NA'], 'something': ['two']}
pd.read_csv('d:data/ex5.csv', na_values=sentinels)

浙公网安备 33010602011771号