pandas(一)操作Series和DataFrame的基本功能
reindex:重新索引
pandas对象有一个重要的方法reindex,作用:创建一个适应新索引的新对象
以Series为例
>>> series_obj = Series([4.5,1.3,5,-5.5],index=('a','b','c','d'))
>>> series_obj
a 4.5
b 1.3
c 5.0
d -5.5
dtype: float64
>>> obj2 = series_obj.reindex(['a','b','c','e','f'])
>>> obj2
a 4.5
b 1.3
c 5.0
e NaN
f NaN
dtype: float64
重新索引的时候可以自动填充Nan值
>>> obj3 = series_obj.reindex(['a','b','c','e','f'],fill_value='')
>>> obj3
a 4.5
b 1.3
c 5
e 0
f 0
对于时间序列这样的有序数据,重新索引可能需要做一些插值操作,reindex的method参数提供此功能。
method的可选选项有:
ffill或pad :前向填充或搬运值
bfill或backfill:后向填充或搬运值
不存在前向或后项的行自动填充Nan
>>> obj4 = Series(['red','blue','green'],index=[0,2,4])
>>> obj4
0 red
2 blue
4 green
dtype: object
>>> obj4.reindex(range(6),method='ffill')
0 red
1 red
2 blue
3 blue
4 green
5 green
dtype: object
DataFrame的重新索引
只传入一个序列的时候,默认是重新索引“行”,可以用关键字参数来定义行索引(index)和列索引(columns)。
>>> frame = DataFrame(np.arange(9).reshape((3,3)),index = ['a','b','c'],columns = ['Ohio','Texas',"Cali"])
>>> frame2 = frame.reindex(['a','b','c','d'])
>>> frame2
Ohio Texas Cali
a 0.0 1.0 2.0
b 3.0 4.0 5.0
c 6.0 7.0 8.0
d NaN NaN NaN >>> frame3 = frame.reindex(columns = ['Ohio','Texas','Cali','Wile'],index=['a','b','c','d'],fill_value=4)
>>> frame3
Ohio Texas Cali Wile
a 0 1 2 4
b 3 4 5 4
c 6 7 8 4
d 4 4 4 4
>>>
如果对DataFrame的行和列重新索引的时候,插值只能按行应用
如果利用ix的标签索功能,重新索引会变得更简洁
>>> frame5 = frame.ix[['a','b','c','d'], ['Ohio','Texas','Cali','Wile']]
>>> frame5
Ohio Texas Cali Wile
a 0.0 1.0 2.0 NaN
b 3.0 4.0 5.0 NaN
c 6.0 7.0 8.0 NaN
d NaN NaN NaN NaN
drop:丢弃指定轴上的项
>>> obj = Series(np.arange(5),index=['a','b','c','d','e'])
>>> obj
a 0
b 1
c 2
d 3
e 4
dtype: int32
>>> new_obj = obj.drop('b')
>>> new_obj
a 0
c 2
d 3
e 4 >>> new_obj2 = obj.drop(['b','c'])
>>> new_obj2
a 0
d 3
e 4
dtype: int32
#dataframe
>>> frame = DataFrame(np.arange(16).reshape((4,4)),index=['a','b','c','d'],columns=['one','two','three','four'])
>>> frame
one two three four
a 0 1 2 3
b 4 5 6 7
c 8 9 10 11
d 12 13 14 15
>>> new_frame = frame.drop('a')
>>> new_frame
one two three four
b 4 5 6 7
c 8 9 10 11
d 12 13 14 15
>>> new_frame2 = frame.drop(['two','four'],axis = 1)
>>> new_frame2
one three
a 0 2
b 4 6
c 8 10
d 12 14
索引、选取和过滤
Series的索引,既可以是类似NumPy数组的索引,也可以是自定义的index
>>> obj
a 0
b 1
c 2
d 3
e 4
dtype: int32
>>> obj['a']
0
>>> obj[1]
1
注意:利用标签的切片运算,标签的右侧是封闭区间的,即包含末端。
>>> obj['a':'c']
a 0
b 1
c 2
dtype: int32
>>> obj[3:4]
d 3
dtype: int32
>>> obj[2:3]
c 2
dtype: int32
>>> obj[[3,1]]
d 3
b 1
dtype: int32
>>> obj[['a','c']]
a 0
c 2
dtype: int32
>>>
通过索引修改值
>>> obj[['b','d']] *=2
>>> obj
a 0
b 2
c 2
d 6
e 4
dtype: int32
dataframe的索引:
通过直接索引只能获取列
>>> frame
one two three four
a 0 1 2 3
b 4 5 6 7
c 8 9 10 11
d 12 13 14 15
>>> frame['a']
KeyError: 'a'
>>> frame['one']
a 0
b 4
c 8
d 12
Name: one, dtype: int32
>>> frame[['one','four']]
one four
a 0 3
b 4 7
c 8 11
d 12 15
通过切片或布尔型数组,选取的是行
>>> frame[1:3] #不闭合区间
one two three four
b 4 5 6 7
c 8 9 10 11
>>> frame[frame['three'] > 8]
one two three four
c 8 9 10 11
d 12 13 14 15
>>>
DataFrame的索引字段ix
>>> frame.ix['a'] #按照行索引
one 0
two 1
three 2
four 3
Name: a, dtype: int32
>>> frame.ix[['b','d']]
one two three four
b 4 5 6 7
d 12 13 14 15
>>> frame.ix[1]#同样是按照行索引
one 4
two 5
three 6
four 7
Name: b, dtype: int32
>>> frame.ix[1:3]
one two three four
b 4 5 6 7
c 8 9 10 11
>>> frame.ix[1:2,[2,3,1]]
three four two
b 6 7 5
>>> frame.ix[1:3,[2,3,1]]
three four two
b 6 7 5
c 10 11 9
>>> frame.ix[['b','d'],['one','three']]
one three
b 4 6
d 12 14
>>> frame.ix[['b','d'],[3,1,2]]
four two three
b 7 5 6
d 15 13 14
>>> frame.ix[:,[2,3,1]]# 选取所有行
three four two
a 2 3 1
b 6 7 5
c 10 11 9
d 14 15 13
>>> frame.ix[frame.three >5,:3]
one two three
b 4 5 6
c 8 9 10
d 12 13 14
算术运算和数据对齐
>>> s1 = Series([1.3,4.5,6.6,3.4],index=['a','b','c','d'])
>>> s2 = Series([1,2,3,4,5,6,7],index=['a','b','c','d','e','f','g'])
>>> s1+s2
a 2.3
b 6.5
c 9.6
d 7.4
e NaN
f NaN
g NaN
dtype: float64
#不重叠的索引处引入缺失值
#DataFrame也是同理
再算术方法中填充缺失值
>>> df1 = DataFrame(np.arange(12).reshape((3,4)),columns=list('abcd'))
>>> df2 = DataFrame(np.arange(20).reshape((4,5)),columns=list('abcde'))
>>> df1+df2#普通的算术运算会产生缺失值
a b c d e
0 0.0 2.0 4.0 6.0 NaN
1 9.0 11.0 13.0 15.0 NaN
2 18.0 20.0 22.0 24.0 NaN
3 NaN NaN NaN NaN NaN
#用算术运算方法,可以填充缺失值
>>> df1.add(df2,fill_value=0)
a b c d e
0 0.0 2.0 4.0 6.0 4.0
1 9.0 11.0 13.0 15.0 9.0
2 18.0 20.0 22.0 24.0 14.0
3 15.0 16.0 17.0 18.0 19.0
>>>
算术运算方法有
add 加法
sub 减法
div 除法
mul 乘法
DataFrame和Series之间的运算
>>> frame
one two three four
a 0 1 2 3
b 4 5 6 7
c 8 9 10 11
d 12 13 14 15
>>> series = frame.ix[0]
>>> series
one 0
two 1
three 2
four 3
Name: a, dtype: int32
>>> frame - series
one two three four
a 0 0 0 0
b 4 4 4 4
c 8 8 8 8
d 12 12 12 12
>>>
两者之间的运算会将Series的索引匹配到DataFrame的列,然后沿着行一直向下广播。
如果某个索引值在DataFrame的列或Series的索引中找不到,则参与运算的连个对象就会被重新索引以形成并集。
>>> series2 = Series(range(3),index = ['two','four','five'])
>>> frame +series2
five four one three two
a NaN 4.0 NaN NaN 1.0
b NaN 8.0 NaN NaN 5.0
c NaN 12.0 NaN NaN 9.0
d NaN 16.0 NaN NaN 13.0
如果希望匹配行,且在列上传播,则必须使用算术方法
>>> series3 = frame['two']
>>> frame.sub(series3,axis = 0)
one two three four
a -1 0 1 2
b -1 0 1 2
c -1 0 1 2
d -1 0 1 2
>>>
pandas(一)操作Series和DataFrame的基本功能的更多相关文章
- pandas基础:Series与DataFrame操作
pandas包 # 引入包 import pandas as pd import numpy as np import matplotlib.pyplot as plt Series Series 是 ...
- pandas 的数据结构Series与DataFrame
pandas中有两个主要的数据结构:Series和DataFrame. [Series] Series是一个一维的类似的数组对象,它包含一个数组数据(任何numpy数据类型)和一个与数组关联的索引. ...
- 02. Pandas 1|数据结构Series、Dataframe
1."一维数组"Series Pandas数据结构Series:基本概念及创建 s.index . s.values # Series 数据结构 # Series 是带有标签的一 ...
- numpy中的ndarray与pandas中的series、dataframe的转换
一个ndarray是一个多维同类数据容器.每一个数组有一个dtype属性,用来描述数组的数据类型. Series是一种一维数组型对象,包含了一个值序列,并且包含了数据标签----索引(index). ...
- Python之Pandas中Series、DataFrame
Python之Pandas中Series.DataFrame实践 1. pandas的数据结构Series 1.1 Series是一种类似于一维数组的对象,它由一组数据(各种NumPy数据类型)以及一 ...
- Python之Pandas中Series、DataFrame实践
Python之Pandas中Series.DataFrame实践 1. pandas的数据结构Series 1.1 Series是一种类似于一维数组的对象,它由一组数据(各种NumPy数据类型)以及一 ...
- pandas-06 Series和Dataframe的排序操作
pandas-06 Series和Dataframe的排序操作 对pandas中的Series和Dataframe进行排序,主要使用sort_values()和sort_index(). DataFr ...
- 利用Python进行数据分析(8) pandas基础: Series和DataFrame的基本操作
一.reindex() 方法:重新索引 针对 Series 重新索引指的是根据index参数重新进行排序. 如果传入的索引值在数据里不存在,则不会报错,而是添加缺失值的新行. 不想用缺失值,可以用 ...
- pandas 的数据结构(Series, DataFrame)
Pandas 讲解 Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的. Pandas 纳入了大量库和一些标 ...
随机推荐
- Atitit. . 软件命名空间与类名命名单词的统计程序设计v2
Atitit. . 软件命名空间与类名命名单词的统计程序设计v2 1. 要实现的目标1 1.1. Camel字符串模式的分词处理1 1.2. 多个大写的处理1 1.3. 数字与字幕的分离1 1.4. ...
- 阻塞赋值与非阻塞赋值(verilog篇)
阻塞赋值与非阻塞赋值(verilog篇) 2017-09-30 竹海 相约电子ee 相信刚刚接触verilog的读者,多少对阻塞赋值和非阻塞赋值仍有一些困惑.笔者在这篇文章,带领大家深入的理解这两者的 ...
- Unix 环境高级编程
UNIX 环境高级编程 本书描述了UNIX系统的程序设计接口--系统调用接口和标准C库提供的很多函数. 与大多数操作系统一样,Unix为程序员运行提供了大量的服务--打开文件,读文件,启动一个新程序, ...
- iOS 学习笔记六 【APP中的文字和APP名字的国际化多语言处理】
今天为新手解决下APP中的文字和APP名字的国际化多语言处理, 不多说了,直接上步骤: 1.打开你的项目,单机project名字,选中project,直接看图吧: 2.创建Localizable.st ...
- Unity3d中模型导入轴向不对的解决方法
在unity3d中导入模型,经常会遇到模型的轴向与unity中默认的轴向不符合的情况. 网上有很多解决办法都是说在3dmax中导出模型时修改模型的轴向,那么我接下来讲的就是如何在unity里面修改模型 ...
- LINUX内核升级-更新网卡驱动
因项目需要,将当前内核(2.6.32-220.el6.x86_64)升级到目标内核(2.6.33-110.el6.x86_64),但是编译的目标 内核(2.6.33-110.el6.x86_64)的对 ...
- php 使用curl 将文件上传
<?php /** * curl文件上传 * @var struing $r_file 上传文件的路劲和文件名 */ function upload_file($r_f ...
- hdu5800 To My Girlfriend dp 需要比较扎实的dp基础。
To My Girlfriend Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- vCenter创建标准网络
vmware虚拟化,有2种网络类型,一种是标准网络,另外一种是分布式网络.这里重点介绍标准网络,标准网络可通过vCenter创建vSwitch标准虚拟交换机(vSS).vSS的承载体是物理 ...
- erlang 洗牌 shuffle
很简单的一个场景:一副扑克(54张)的乱序洗牌 shuffle_list(List) -> [X || {_, X} <- lists:sort([{random:uniform(), N ...