利用python进行数据分析-06-pandas-基本功能

1、重新索引

obj = pd.Series([4.5,7.2,-5.3,3.6],index = [‘d‘,‘b‘,‘a‘,‘c‘])

obj
Out[41]:
d    4.5
b    7.2
a   -5.3
c    3.6
dtype: float64

obj2 = obj.reindex([‘a‘,‘b‘,‘c‘,‘d‘,‘e‘])

obj2
Out[43]:
a   -5.3
b    7.2
c    3.6
d    4.5
e    NaN
dtype: float64

obj.reindex([‘a‘,‘b‘,‘c‘,‘d‘,‘e‘],fill_value = 0)
Out[44]:
a   -5.3
b    7.2
c    3.6
d    4.5
e    0.0
dtype: float64

可以利用reindex进行重新索引,其中如果没有索引将会进行缺失值进行填充。其中可以以fill_value进行默认赋值

对于已经确认的Series,可以通过ffill进行向前填充:

obj3 = pd.Series([‘blue‘,‘purple‘,‘yellow‘],index = [0,2,4])

obj3.reindex(range(6),method = ‘ffill‘)
Out[50]:
0      blue
1      blue
2    purple
3    purple
4    yellow
5    yellow
dtype: object

ffill 或 pad    前向填充(或搬运)值

bfill 或 backfill    后向填充(或搬运)值

frame = pd.DataFrame(np.arange(9).reshape((3,3)),index = [‘a‘,‘c‘,‘d‘],columns = [‘Ohio‘,‘Texas‘,‘California‘])  #reshape 重新将数组调整成m*n矩阵的格式

frame
Out[55]:
   Ohio  Texas  California
a     0      1           2
c     3      4           5
d     6      7           8

feame2 = frame.reindex([‘a‘,‘b‘,‘c‘,‘d‘])

feame2
Out[57]:
   Ohio  Texas  California
a     0      1           2
b   NaN    NaN         NaN
c     3      4           5
d     6      7           8

重新索引用reindex:

state = [‘Texas‘,‘Utah‘,‘California‘]

frame.reindex(index = [‘a‘,‘b‘,‘c‘,‘d‘],method = ‘ffill‘,columns = state)
Out[65]:
   Texas  Utah  California
a      1   NaN           2
b      1   NaN           2
c      4   NaN           5
d      7   NaN           8frame.ix[[‘a‘,‘b‘,‘c‘,‘d‘],state]     #采用ix标签索引功能,从新索引将会更加简单
Out[66]:
   Texas  Utah  California
a      1   NaN           2
b    NaN   NaN         NaN
c      4   NaN           5
d      7   NaN           8

2、丢弃指定轴上的项

drop方法返回的是一个在指定轴上的删除了制定值得新对象:

obj =pd.Series(np.arange(5.),index = [‘a‘,‘b‘,‘c‘,‘d‘,‘e‘])

new_obj = obj.drop(‘c‘)

new_obj
Out[69]:
a    0
b    1
d    3
e    4
dtype: float64

obj.drop([‘d‘,‘c‘])
Out[70]:
a    0
b    1
e    4
dtype: float64

3、索引、选取和过滤

obj = pd.Series(np.arange(4.0),index = [‘a‘,‘b‘,‘c‘,‘d‘])

obj
Out[72]:
a    0
b    1
c    2
d    3
dtype: float64

obj[2:4]
Out[73]:
c    2
d    3
dtype: float64

obj[1:2]
Out[74]:
b    1
dtype: float64

利用标签的切片是运算和普通的python切片运算是不一样的,其末端是包含的(inclusive):

obj[‘b‘:‘c‘]
Out[76]:
b    1
c    2
dtype: float64

利用索引字段ix进行索引选择:

data
Out[4]:
          one  two  three  four
Ohio        0    1      2     3
Colorado    4    5      6     7
Utah        8    9     10    11
New York   12   13     14    15

data.ix[‘Colorado‘,[‘two‘,‘three‘]]
Out[5]:
two      5
three    6
Name: Colorado, dtype: int32

data.ix[[‘Colorado‘,‘Utah‘],[3,0,1]]
Out[6]:
          four  one  two
Colorado     7    4    5
Utah        11    8    9

data.ix[2]
Out[7]:
one       8
two       9
three    10
four     11
Name: Utah, dtype: int32

data.ix[:‘Utah‘,‘two‘]
Out[8]:
Ohio        1
Colorado    5
Utah        9
Name: two, dtype: int32

data.ix[data.three > 5,:3]
Out[9]:
          one  two  three
Colorado    4    5      6
Utah        8    9     10
New York   12   13     14

4、算数运算和数据对齐

对不同索引的对象进行算数运算,如果对象相加时,如果存在不同的索引对,则结果的索引就是该索引对的并集

s1 = pd.Series([7.3,-2.5,3.4,1.5],index = [‘a‘,‘c‘,‘d‘,‘e‘])

s2 = pd.Series([-2.1,3.6,-1.5,4,3.1],index = [‘a‘,‘c‘,‘e‘,‘f‘,‘g‘])

s1
Out[12]:
a    7.3
c   -2.5
d    3.4
e    1.5
dtype: float64

s2
Out[13]:
a   -2.1
c    3.6
e   -1.5
f    4.0
g    3.1
dtype: float64

s1+s2
Out[14]:
a    5.2
c    1.1
d    NaN
e    0.0
f    NaN
g    NaN
dtype: float64

自动的数据对齐操作在不重叠的所引处引入了NA值,缺失值会在算数值中传播。

两个数值进行运算时,如果其中一个对象中某个轴标签在另一个对象中找不到时填充一个特殊值(比如0)

df1 = pd.DataFrame(np.arange(12.).reshape((3,4)),columns = list(‘abcd‘))    #可进行list创建数组

df2 = pd.DataFrame(np.arange(20.).reshape((4,5)),columns = list(‘abcde‘))

df1
Out[18]:
   a  b   c   d
0  0  1   2   3
1  4  5   6   7
2  8  9  10  11

df2
Out[19]:
    a   b   c   d   e
0   0   1   2   3   4
1   5   6   7   8   9
2  10  11  12  13  14
3  15  16  17  18  19

df1.add(df2,fill_value = 0)
Out[20]:
    a   b   c   d   e
0   0   2   4   6   4
1   9  11  13  15   9
2  18  20  22  24  14
3  15  16  17  18  19
在对Series或DataFrame重新索引时,也可以指定一个填充值
df1.reindex(columns = df2.columns,fill_value = 0)
Out[21]:
   a  b   c   d  e
0  0  1   2   3  0
1  4  5   6   7  0
2  8  9  10  11  0

add 用于加法                   sub用于减法                 div用于除法                   mul用于乘法

5、用于DataFrame和Series之间的运算

arr = np.arange(12.).reshape((3,4))

arr
Out[23]:
array([[  0.,   1.,   2.,   3.],
       [  4.,   5.,   6.,   7.],
       [  8.,   9.,  10.,  11.]])

arr[0]
Out[24]: array([ 0.,  1.,  2.,  3.])

arr-arr[0]
Out[25]:
array([[ 0.,  0.,  0.,  0.],
       [ 4.,  4.,  4.,  4.],
       [ 8.,  8.,  8.,  8.]])

6、函数应用和映射

frame
Out[30]:
               b         d         e
Utah    0.126339 -1.371416  0.971039
Ohio    0.325697 -1.110609  1.177894
Texas   0.114226 -1.359126 -0.323779
OREGON  1.015949  0.904341  1.275054

np.abs(frame)
Out[31]:
               b         d         e
Utah    0.126339  1.371416  0.971039
Ohio    0.325697  1.110609  1.177894
Texas   0.114226  1.359126  0.323779
OREGON  1.015949  0.904341  1.275054

f=lambda x: x.max() - x.min()    
#lambda 表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数。如f表示极差函数。
frame.apply(f)
Out[33]:
b    0.901723
d    2.275758
e    1.598833
dtype: float64

frame.apply(f,axis =1)
Out[34]:
Utah      2.342456
Ohio      2.288503
Texas     1.473352
OREGON    0.370713
dtype: float64

传递给apply的值还可以返回由多个值组成的Series:

def f(x):
    return pd.Series([x.min(),x.max()],index = [‘min‘,‘max‘])
frame.apply(f)
Out[40]:
            b         d         e
min  0.114226 -1.371416 -0.323779
max  1.015949  0.904341  1.275054

元素级的python函数也是可以使用的,假如frame中的各个浮点值的格式化字符串,可使用applymap即可:

format = lambda x: ‘%.2f‘ % x

frame.applymap(format)
Out[42]:
           b      d      e
Utah    0.13  -1.37   0.97
Ohio    0.33  -1.11   1.18
Texas   0.11  -1.36  -0.32
OREGON  1.02   0.90   1.28

之所以叫做applymap,是因为Series有一个应用元素级函数的map方法:

frame[‘e‘].map(format)
Out[44]:
Utah       0.97
Ohio       1.18
Texas     -0.32
OREGON     1.28
Name: e, dtype: object

7、排序和排名

DataFrame对轴索引进行排序:sort_index()       x.sort_index(axis =1,ascending = False)

Series对值进行排序:order()

Dataframe对值进行排序:sort_index(by = [‘a’,’b’])    #对a,b列进行排序,

rank排序:

Series:会增设一个排名值

默认情况下,rank是通过“为各组分配一个平均排名”的方式来破坏平级关系的。

两个4共同排名第四,两则均取4.5,

obj = pd.Series([7,-5,7,4,2,0,4])

obj.rank()
Out[50]:
0    6.5
1    1.0
2    6.5
3    4.5
4    3.0
5    2.0
6    4.5
dtype: float64

也可以根据在原数据中出现的顺序来给出排名:

obj.rank(method = ‘first‘)  #可知原数据中-5是第一小的,故索引为1的位置显示为1,其中索引为3的值4排第四,索引为6的值4排第五
Out[52]:
0    6
1    1
2    7
3    4
4    3
5    2
6    5
dtype: float64

8、带有重复值的轴索引

obj = pd.Series(range(5),index = [‘a‘,‘a‘,‘b‘,‘b‘,‘c‘])

obj
Out[54]:
a    0
a    1
b    2
b    3
c    4
dtype: int32

obj.index.is_unique    #is_unique 进行检查索引是否唯一
Out[55]: False

obj[‘a‘]  #如果索引对应多个值,则返回一个Series,若对应一个值,则返回一个标量值
Out[56]:
a    0
a    1
dtype: int32

对DataFrame的行进行索引时也是如此。

时间: 2024-10-16 17:28:56

利用python进行数据分析-06-pandas-基本功能的相关文章

利用Python进行数据分析(15) pandas基础: 字符串操作

  字符串对象方法 split()方法拆分字符串: strip()方法去掉空白符和换行符: split()结合strip()使用: "+"符号可以将多个字符串连接起来: join()方法也是连接字符串,比较它和"+"符号的区别: in关键字判断一个字符串是否包含在另一个字符串中: index()方法和find()方法判断一个子字符串的位置: index()方法和find()方法的区别是:如果不包含子字符串,index()会抛出一个异常,而find()会返回-1. c

利用Python进行数据分析(14) pandas基础: 数据转换

数据转换指的是对数据的过滤.清理以及其他的转换操作. 移除重复数据 DataFrame里经常会出现重复行,DataFrame提供一个duplicated()方法检测各行是否重复,另一个drop_duplicates()方法用于丢弃重复行: duplicated()和drop_duplicates()方法默认判断全部列,如果不想这样,传入列的集合作为参数可以指定按列判断,例如: duplicated()和drop_duplicates()方法默认保留第一个出现的值,传入take_last=True

利用Python进行数据分析(11) pandas基础: 层次化索引

层次化索引 层次化索引指你能在一个数组上拥有多个索引,例如: 有点像Excel里的合并单元格对么? 根据索引选择数据子集 以外层索引的方式选择数据子集: 以内层索引的方式选择数据: 多重索引Series转换为DataFrame 层次化索引在数据重塑和分组中扮演着很重要的角色,例如,上面的层次化索引数据可以转换为一个DataFrame: 对于一个DataFrame,横轴和竖轴都可以有层次化索引,例如: 重排分级顺序 根据索引交换 swaplevel()函数可以将两个级别的数据进行交换,例如: 根据

利用Python进行数据分析——pandas入门

利用Python进行数据分析--pandas入门 基于NumPy建立的 from pandas importSeries,DataFrame,import pandas as pd 一.两种数据结构 1.Series 类似于Python的字典,有索引和值 创建Series #不指定索引,默认创建0-N In [54]: obj = Series([1,2,3,4,5]) In [55]: obj Out[55]: 0 1 1 2 2 3 3 4 4 5 dtype: int64 #指定索引 In

利用 Python 进行数据分析(九)pandas 汇总统计和计算

pandas 对象拥有一些常用的数学和统计方法.   例如,sum() 方法,进行列小计: sum() 方法传入 axis=1 指定为横向汇总,即行小计: idxmax() 获取最大值对应的索引: 还有一种汇总是累计型的,cumsum(),比较它和 sum() 的区别: unique() 方法用于返回数据里的唯一值: value_counts() 方法用于统计各值出现的频率: isin() 方法用于判断成员资格: 安装步骤已经在首篇随笔里写过了,这里不在赘述.利用 Python 进行数据分析(一

利用 Python 进行数据分析(八)pandas 基本操作(Series 和 DataFrame)

一.reindex() 方法:重新索引 针对 Series   重新索引指的是根据index参数重新进行排序. 如果传入的索引值在数据里不存在,则不会报错,而是添加缺失值的新行. 不想用缺失值,可以用 fill_value 参数指定填充值. 例如: fill_value 会让所有的缺失值都填充为同一个值,如果不想这样而是用相邻的元素(左或者右)的值填充,则可以用 method 参数,可选的参数值为 ffill 和 bfill,分别为用前值填充和用后值填充: 针对 DataFrame   重新索引

利用 Python 进行数据分析(七)- pandas 简单介绍(Series和DataFrame)

一.pandas 是什么 pandas 是基于 NumPy 的一个 Python 数据分析包,主要目的是为了数据分析.它提供了大量高级的数据结构和对数据处理的方法. pandas 有两个主要的数据结构:Series 和 DataFrame. 二.Series Series 是一个一维数组对象 ,类似于 NumPy 的一维 array.它除了包含一组数据还包含一组索引,所以可以把它理解为一组带索引的数组. 将 Python 数组转换成 Series 对象: 将 Python 字典转换成 Serie

利用 Python 进行数据分析(十二)pandas:数据合并

pandas 提供了三种主要方法可以对数据进行合并: pandas.merge()方法:数据库风格的合并: pandas.concat()方法:轴向连接,即沿着一条轴将多个对象堆叠到一起: 实例方法combine_first()方法:合并重叠数据. pandas.merge()方法:数据库风格的合并 例如,通过merge()方法将两个DataFrame合并: on='name'的意思是将name列当作键: 默认情况下,merge做的是内连接(inner),即键的交集. 其他方式还有左连接(lef

《利用Python进行数据分析》之pandas的时间序列基础

本章以<利用python进行数据分析>的第10章:时间序列 为基础,整理了pandas 库中时间序列相关用法. 时间序列数据的意义取决于具体的应用场景,主要有以下几种: 时间戳(timestamp) 固定时期(period) 时间间隔(interval) 实验或过程时间 pandas提供了一组标准的时间序列处理工具和算法,可以轻松的对时间序列进行切片.聚合,对定期/不定期的时间序列进行重采样等. 这些工具大部分对金融和经济数据尤为有用,同时也可以用来分析服务器和日志数据. 1.日期和时间数据类

利用python进行数据分析--(阅读笔记一)

以此记录阅读和学习<利用Python进行数据分析>这本书中的觉得重要的点! 第一章:准备工作 1.一组新闻文章可以被处理为一张词频表,这张词频表可以用于情感分析. 2.大多数软件是由两部分代码组成:少量需要占用大部分执行时间的代码,以及大量不经常执行的“粘合剂代码”. cython已经成为python领域中创建编译型扩展以及对接c/c++代码的一大途径. 3.在那些要求延迟性非常小的应用程序中(例如高频交易系统),为了尽最大可能地优化性能,耗费时间使用诸如C++这样更低级.更低生产率的语言进行