Python Pandas 中的数据结构详解

目录
  • 1.Series
    • 1.1通过列表创建Series
    • 1.2通过字典创建Series
  • 2.DataFrame
  • 3.索引对象
  • 4.查看DataFrame的常用属性

前言:

Pandas有三种数据结构:Series、DataFrame和Panel。Series类似于数组;DataFrame类似于表格;Panel可视为Excel的多表单Sheet

1.Series

Series是一种一维数组对象,包含一个值序列,并且包含数据标签,称为索引(index),通过索引来访问数组中的数据。

1.1通过列表创建Series

例1.通过列表创建

import pandas as pd
obj = pd.Series([1,-2,3,4])   #仅由一个数组构成
print(obj)

输出:

0 1
1 -2
2 3
3 4
dtype: int64

输出的第一列为index,第二列为数据value。如果创建Series时没有指定index,Pandas会采用整型数据作为该Series的index。也可以使用Python里的索引index和切片slice技术

例2.创建Series时指定索引

import pandas as pd
i = ["a","c","d","a"]
v = [2,4,5,7]
t = pd.Series(v,index=i,name="col")
print(t)

out:

a    2
c    4
d    5
a    7
Name: col, dtype: int64

尽管创建Series指定了index,实际上Pandas还是有隐藏的index位置信息。所以Series有两套描述某条数据手段:位置和标签

例3.Series位置和标签的使用

import pandas as pd
val = [2,4,5,6]
idx1 = range(10,14)
idx2 = "hello the cruel world".split()
s0 = pd.Series(val)
s1 = pd.Series(val,index=idx1)
t = pd.Series(val,index=idx2)
print(s0.index)
print(s1.index)
print(t.index)
print(s0[0])
print(s1[10])
print('default:',t[0],'label:',t["hello"])

1.2通过字典创建Series

如果数据被存放在一个Python字典中,也可以直接通过这个字典来创建Series

例4.通过字典创建Series

import pandas as pd
sdata = {'Ohio':35000,'Texass':71000,'Oregon':16000,'Utah':5000}
obj = pd.Series(sdata)
print(obj)

Ohio      35000
Texass    71000
Oregon    16000
Utah       5000
dtype: int64

如果只传入一个字典,则结果Series中的索引就是原字典的键(有序排列)

例5.通过字典创建Series时的索引

import pandas as pd
sdata = {"a":100,"b":200,"e":300}
obj = pd.Series(sdata)
print(obj)

a    100
b    200
e    300
dtype: int64

如果字典中的键值和指定的索引不匹配,则对应的值时NaN

例6.键值和指定索引不匹配

import pandas as pd
sdata = {"a":100,"b":200,"e":300}
letter = ["a","b","c","e"]
obj = pd.Series(sdata,index=letter)
print(obj)

a    100.0
b    200.0
c      NaN
e    300.0
dtype: float64

对于许多应用而言,Series重要的一个功能是:它在算术运算中会自动对齐不同索引的数据

例7.不同索引数据的自动对齐

import pandas as pd
sdata = {'Ohio':35000,'Texas':71000,'Oregon':16000,'Utah':5000}
obj1 = pd.Series(sdata)
states = ['California','Ohio','Oregon','Texas']
obj2 = pd.Series(sdata,index=states)
print(obj1+obj2)

California         NaN
Ohio           70000.0
Oregon         32000.0
Texas         142000.0
Utah               NaN
dtype: float64

Series的索引可以通过赋值的方式就地修改

  例8.Series索引的修改

import pandas as pd
obj = pd.Series([4,7,-3,2])
obj.index = ['Bob','Steve','Jeff','Ryan']
print(obj)

Bob      4
Steve    7
Jeff    -3
Ryan     2
dtype: int64

2.DataFrame

DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同类型的值(数值、字符串、布尔值等)。DataFrame既有行索引也有列索引,它可以被看作由Series组成的字典(共用同一个索引)。跟其他类型的数据结构相比,DataFrame中面向行和面向列的操作上基本上是平衡的

构建DataFrame的方式有很多,最常用的是直接传入一个由等长列表或NumPy数组组成的字典来形成DataFrame

例9.DataFrame的创建

import pandas as pd
data = {
    'name':['张三','李四','王五','小明'],
    'sex':['female','female','male','male'],
    'year':[2001,2001,2003,2002],
    'city':['北京','上海','广州','北京']
}
df = pd.DataFrame(data)
print(df)

name     sex  year city
0   张三  female  2001   北京
1   李四  female  2001   上海
2   王五    male  2003   广州
3   小明    male  2002   北京

DataFrame会自动加上索引(跟Series一样),且全部列会被有序排列。如果指定了列名序列,则DataFrame的列就会按照指定顺序进行排列

例10.DataFrame的索引

import pandas as pd
data = {
    'name':['张三','李四','王五','小明'],
    'sex':['female','female','male','male'],
    'year':[2001,2001,2003,2002],
    'city':['北京','上海','广州','北京']
}
df = pd.DataFrame(data,columns = ['name','year','sex','city'])
print(df)

name  year     sex city
0   张三  2001  female   北京
1   李四  2001  female   上海
2   王五  2003    male   广州
3   小明  2002    male   北京

跟Series一样,如果传入的列在数据中找不到,就会产生NaN值。

例11.DataFrame创建时的空缺值

import pandas as pd
data = {
    'name':['张三','李四','王五','小明'],
    'sex':['female','female','male','male'],
    'year':[2001,2001,2003,2002],
    'city':['北京','上海','广州','北京']
}
df = pd.DataFrame(data,columns = ['name','year','sex','city','address'])
print(df)

name  year     sex city address
0   张三  2001  female   北京     NaN
1   李四  2001  female   上海     NaN
2   王五  2003    male   广州     NaN
3   小明  2002    male   北京     NaN

DataFrame构造函数的columns函数给出列的名字,index给出label标签

例12.DataFrame构建时指定列名

import pandas as pd
data = {
    'name':['张三','李四','王五','小明'],
    'sex':['female','female','male','male'],
    'year':[2001,2001,2003,2002],
    'city':['北京','上海','广州','北京']
}
df = pd.DataFrame(data,columns = ['name','year','sex','city','address'],index = ['a','b','c','d'])
print(df)

name  year     sex city address
a   张三  2001  female   北京     NaN
b   李四  2001  female   上海     NaN
c   王五  2003    male   广州     NaN
d   小明  2002    male   北京     NaN

3.索引对象

Pandas的索引对象负责管理轴标签和其他元数据(例如轴名称等).构建Series或DataFrame时,所用到的任何数组或其他序列的标签都会被转换成一个Index

  例13.显示DataFrame的索引和列

import pandas as pd
data = {
    'name':['张三','李四','王五','小明'],
    'sex':['female','female','male','male'],
    'year':[2001,2001,2003,2002],
    'city':['北京','上海','广州','北京']
}
df = pd.DataFrame(data,columns = ['name','year','sex','city','address'],index = ['a','b','c','d'])
print(df)
print(df.index)
print(df.columns)

name  year     sex city address
a   张三  2001  female   北京     NaN
b   李四  2001  female   上海     NaN
c   王五  2003    male   广州     NaN
d   小明  2002    male   北京     NaN
Index(['a', 'b', 'c', 'd'], dtype='object')
Index(['name', 'year', 'sex', 'city', 'address'], dtype='object')

索引对象不能进行修改,否则会报错。不可修改性非常重要,因为这样才能使Index对象在多个数据结构之间安全共享
除了长的像数组,Index的功能也类似于一个固定大小的集合

例14.DataFrame的Index

import pandas as pd
data = {
    'name':['张三','李四','王五','小明'],
    'sex':['female','female','male','male'],
    'year':[2001,2001,2003,2002],
    'city':['北京','上海','广州','北京']
}
df = pd.DataFrame(data,columns = ['name','year','sex','city','address'],index = ['a','b','c','d'])

print('name'in df.columns)
print('a'in df.index)

True

True

每个索引都有一些方法和属性,他们可用于设置逻辑并回答有关该索引所包含的数据的常见的问题。

例15.插入索引值

import pandas as pd
data = {
    'name':['张三','李四','王五','小明'],
    'sex':['female','female','male','male'],
    'year':[2001,2001,2003,2002],
    'city':['北京','上海','广州','北京']
}
df = pd.DataFrame(data,columns = ['name','year','sex','city','address'],index = ['a','b','c','d'])

df.index.insert(1,'w')
Index(['a', 'w', 'b', 'c', 'd'], dtype='object')

4.查看DataFrame的常用属性

DataFrame的基础属性有value、index、columns、dtypes、ndim和shape,分别可以获取DataFrame的元素、索引、列名、类型、维度和形状。

例16.显示DataFrame的属性

import pandas as pd
data = {
    'name':['张三','李四','王五','小明'],
    'sex':['female','female','male','male'],
    'year':[2001,2001,2003,2002],
    'city':['北京','上海','广州','北京']
}
df = pd.DataFrame(data,columns = ['name','year','sex','city','address'],index = ['a','b','c','d'])

print(df)
print('信息表的所有值为:\n',df.values)
print('信息表的所有列为:\n',df.columns)
print('信息表的元素个数:\n',df.size)
print('信息表的维度:\n',df.ndim)
print('信息表的形状:\n',df.shape)
 #//输出
  name  year     sex city address
a   张三  2001  female   北京     NaN
b   李四  2001  female   上海     NaN
c   王五  2003    male   广州     NaN
d   小明  2002    male   北京     NaN
信息表的所有值为:
 [['张三' 2001 'female' '北京' nan]
 ['李四' 2001 'female' '上海' nan]
 ['王五' 2003 'male' '广州' nan]
 ['小明' 2002 'male' '北京' nan]]
信息表的所有列为:
 Index(['name', 'year', 'sex', 'city', 'address'], dtype='object')
信息表的元素个数:
 20
信息表的维度:
 2
信息表的形状:
 (4, 5)

到此这篇关于Python Pandas 中的数据结构详解的文章就介绍到这了,更多相关Python Pandas 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python Pandas数据结构简单介绍

    Series Series 类似一维数组,由一组数据及一组相关数据标签组成.使用pandas的Series类即可创建. import pandas as pd s1 = pd.Series(['a', 'b', 'c,', 'd']) print(s1) #输出: 0 a # 1 b # 2 c # 3 d # dtype: object 上面是传入一个列表实现,上面的0,1,2,3就是数据的默认标签.另外可以通过index属性自定义标签. s2 = pd.Series(['1', '2', '

  • Python Pandas学习之Pandas数据结构详解

    目录 1Pandas介绍 2Pandas数据结构 2.1Series 2.2DataFrame 1 Pandas介绍 2008年WesMcKinney开发出的库 专门用于数据挖掘的开源python库 以Numpy为基础,借力Numpy模块在计算方面性能高的优势 基于matplotlib,能够简便的画图 独特的数据结构 Numpy已经能够帮助我们处理数据,能够结合matplotlib解决部分数据展示等问题,那么pandas学习的目的在什么地方呢? 增强图表可读性 便捷的数据处理能力 读取文件方便

  • Python Pandas 中的数据结构详解

    目录 1.Series 1.1通过列表创建Series 1.2通过字典创建Series 2.DataFrame 3.索引对象 4.查看DataFrame的常用属性 前言: Pandas有三种数据结构:Series.DataFrame和Panel.Series类似于数组:DataFrame类似于表格:Panel可视为Excel的多表单Sheet 1.Series Series是一种一维数组对象,包含一个值序列,并且包含数据标签,称为索引(index),通过索引来访问数组中的数据. 1.1通过列表创

  • 对Python 2.7 pandas 中的read_excel详解

    导入pandas模块: import pandas as pd 使用import读入pandas模块,并且为了方便使用其缩写pd指代. 读入待处理的excel文件: df = pd.read_excel('log.xls') 通过使用read_excel函数读入excel文件,后面需要替换成excel文件所在的路径.读入之后变为pandas的DataFrame对象.DataFrame是一个面向列(column-oriented)的二维表结构,且含有列表和行标,对excel文件的操作就转换为对Da

  • Python pandas 列转行操作详解(类似hive中explode方法)

    最近在工作上用到Python的pandas库来处理excel文件,遇到列转行的问题.找了一番资料后成功了,记录一下. 1. 如果需要爆炸的只有一列: df=pd.DataFrame({'A':[1,2],'B':[[1,2],[1,2]]}) df Out[1]: A B 0 1 [1, 2] 1 2 [1, 2] 如果要爆炸B这一列,可以直接用explode方法(前提是你的pandas的版本要高于或等于0.25) df.explode('B') A B 0 1 1 1 1 2 2 2 1 3

  • Python Pandas数据处理高频操作详解

    目录 引入依赖 算法相关依赖 获取数据 生成df 重命名列 增加列 缺失值处理 独热编码 替换值 删除列 数据筛选 差值计算 数据修改 时间格式转换 设置索引列 折线图 散点图 柱状图 热力图 66个最常用的pandas数据分析函数 从各种不同的来源和格式导入数据 导出数据 创建测试对象 查看.检查数据 数据选取 数据清理 筛选,排序和分组依据 数据合并 数据统计 16个函数,用于数据清洗 1.cat函数 2.contains 3.startswith/endswith 4.count 5.ge

  • Python函数中的全局变量详解

    目录 1.什么是全局变量? 2.在函数外部定义的变量是全局变量. 3.在函数内部定义中添加global关键词后变成全局变量. 总结 1.什么是全局变量? 在Python中,全局变量指的是可以作用于函数内部和外部的变量. 在这里有两种情况:在函数的外部定义和内部定义添加global关键词变成全局变量. 2.在函数外部定义的变量是全局变量. 假设一个变量在函数的外部定义,那么这个函数就可以在函数的内部访问,也可以在函数的外部的访问. 示例:定义一个全局变量b,然后定义一个函数a,最后在该函数的内部和

  • Pandas中resample方法详解

    Pandas中的resample,重新采样,是对原样本重新处理的一个方法,是一个对常规时间序列数据重新采样和频率转换的便捷的方法. 方法的格式是: DataFrame.resample(rule, how=None, axis=0, fill_method=None, closed=None, label=None, convention='start',kind=None, loffset=None, limit=None, base=0) 参数详解是: 参数 说明 freq 表示重采样频率,

  • python pandas模块基础学习详解

    Pandas类似R语言中的数据框(DataFrame),Pandas基于Numpy,但是对于数据框结构的处理比Numpy要来的容易. 1. Pandas的基本数据结构和使用 Pandas有两个主要的数据结构:Series和DataFrame.Series类似Numpy中的一维数组,DataFrame则是使用较多的多维表格数据结构. Series的创建 >>>import numpy as np >>>import pandas as pd >>>s=p

  • Python pandas.replace的用法详解

    目录 1. pandas.replace()介绍 2. 单值替换 2.1 全局替换 2.2 选定条件替换 3. 多值替换 3.1 多个值替换同一个值 3.2 多个值替换不同值 4. 模糊查询替换 5. 缺失值替换 5.1 method的用法 (向前/后填充) 5.2 limit的用法 (限制最大填充间隔) 补充:使用实例代码 总结 1. pandas.replace()介绍 pandas.Series.replace 官方文档 Series.replace(to_replace=None, va

  • Python pandas处理缺失值方法详解(dropna、drop、fillna)

    目录 面对缺失值三种处理方法: 对于option1: 对于option 2: 对于option3 总结 面对缺失值三种处理方法: option 1: 去掉含有缺失值的样本(行) option 2:将含有缺失值的列(特征向量)去掉 option 3:将缺失值用某些值填充(0,平均值,中值等) 对于dropna和fillna,dataframe和series都有,在这主要讲datafame的 对于option1: 使用DataFrame.dropna(axis=0, how='any', thres

  • python线程中同步锁详解

    在使用多线程的应用下,如何保证线程安全,以及线程之间的同步,或者访问共享变量等问题是十分棘手的问题,也是使用多线程下面临的问题,如果处理不好,会带来较严重的后果,使用python多线程中提供Lock Rlock Semaphore Event Condition 用来保证线程之间的同步,后者保证访问共享变量的互斥问题 Lock & RLock:互斥锁 用来保证多线程访问共享变量的问题 Semaphore对象:Lock互斥锁的加强版,可以被多个线程同时拥有,而Lock只能被某一个线程同时拥有. E

随机推荐