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
Serise

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)
dataframe和索引

 

posted @ 2016-08-09 22:39  若时光搁浅  阅读(216)  评论(0)    收藏  举报