[toc]
03. Pandas数据结构
- Series
 - DataFrame
 - 从DataFrame中查询出Series
 
1. Series
Series是一种类似于一维数组的对象,它由一组数据(不同数据类型)以及一组与之相关的数据标签(即索引)组成。
1.1 仅有数据列表即可产生最简单的Series
import pandas as pd
import numpy as np
s1 = pd.Series([1,'a',5.2,7])
# 左侧为索引,右侧是数据
s1
    0      1
    1      a
    2    5.2
    3      7
    dtype: object
# 获取索引
s1.index
    RangeIndex(start=0, stop=4, step=1)
# 获取数据
s1.values
    array([1, 'a', 5.2, 7], dtype=object)
[x for x in s1.items()]
[(0, 1), (1, 'a'), (2, 5.2), (3, 7)]
1.2 创建一个具有标签索引的Series
s2 = pd.Series([1, 'a', 5.2, 7], index=['d','b','a','c'])
s2
    d      1
    b      a
    a    5.2
    c      7
    dtype: object
s2.index
    Index(['d', 'b', 'a', 'c'], dtype='object')
	
1.3 使用Python字典创建Series
sdata={'Ohio':35000,'Texas':72000,'Oregon':16000,'Utah':5000}
s3=pd.Series(sdata)
s3
    Ohio      35000
    Texas     72000
    Oregon    16000
    Utah       5000
    dtype: int64
1.4 根据标签索引查询数据
类似Python的字典dict
s2
    d      1
    b      a
    a    5.2
    c      7
    dtype: object
# 方括号,里面是一个标签索引
s2['a']
    5.2
type(s2['a'])
    float
# 里面是一个列表
s2[['b','a']]
    b      a
    a    5.2
    dtype: object
type(s2[['b','a']])
    pandas.core.series.Series
2. DataFrame
DataFrame是一个表格型的数据结构
- 每列可以是不同的值类型(数值、字符串、布尔值等)
 - 既有行索引index,也有列索引columns
 - 可以被看做由Series组成的字典
 
创建dataframe最常用的方法,见02节读取纯文本文件、excel、mysql数据库
2.1 根据多个字典序列创建dataframe
data={
        'state':['Ohio','Ohio','Ohio','Nevada','Nevada'],
        'year':[2000,2001,2002,2001,2002],
        'pop':[1.5,1.7,3.6,2.4,2.9]
    }
df = pd.DataFrame(data)
df
df.dtypes
    state     object
    year       int64
    pop      float64
    dtype: object
# 列索引
df.columns
    Index(['state', 'year', 'pop'], dtype='object')
# 行索引
df.index
    RangeIndex(start=0, stop=5, step=1)
3. 从DataFrame中查询出Series
- 如果只查询一行、一列,返回的是pd.Series
 - 如果查询多行、多列,返回的是pd.DataFrame
 
df
df.values #二维数组
array([['Ohio', 2000, 1.5],
       ['Ohio', 2001, 1.7],
       ['Ohio', 2002, 3.6],
       ['Nevada', 2001, 2.4],
       ['Nevada', 2002, 2.9]], dtype=object)
3.1 查询一列,结果是一个pd.Series
# 方括号,列索引
df['year'] # 等价于 df.year
    0    2000
    1    2001
    2    2002
    3    2001
    4    2002
    Name: year, dtype: int64
type(df['year'])
    pandas.core.series.Series
3.2 查询多列,结果是一个pd.DataFrame
# 里面是一个列表 多个列
df[['year', 'pop']]
type(df[['year', 'pop']])
    pandas.core.frame.DataFrame
3.3 查询一行,结果是一个pd.Series
# 一行 loc=loction位置
df.loc[1]
    state    Ohio
    year     2001
    pop       1.7
    Name: 1, dtype: object
type(df.loc[1])
    pandas.core.series.Series
3.4 查询多行,结果是一个pd.DataFrame
# 像list的切片
df.loc[1:3]
type(df.loc[1:3])
    pandas.core.frame.DataFrame
本文使用 文章同步助手 同步











网友评论