python/pandas/numpy数据分析(十)-函数, rank,重复索引

简介: DataFrame的apply方法,将函数应用到行或者列形成的一维数组上.frame=pd.

DataFrame的apply方法,将函数应用到行或者列形成的一维数组上.

frame=pd.DataFrame(np.random.randn(4,3),columns=list('bde'),index=['Utha','Ohio','Texas','Oregon'])
frame
. b d e
Utha -0.683356 -0.577942 -0.022012
Ohio -0.230113 -1.240582 -0.497071
Texas -0.487803 0.044398 0.958905
Oregon -0.178136 -1.201671 -0.921106
np.abs(frame)
. b d e
Utha 0.683356 0.577942 0.022012
Ohio 0.230113 1.240582 0.497071
Texas 0.487803 0.044398 0.958905
Oregon 0.178136 1.201671 0.921106
f=lambda x: x.max()- x.min()
frame.apply(f)

b    0.505220
d    1.284980
e    1.880011
dtype: float64

frame.apply(f, axis=1)
Utha      0.661344
Ohio      1.010468
Texas     1.446708
Oregon    1.023536
dtype: float64

除了标量以外,传递给apply的函数还可以返回由多个值组成的Series:

def f(x):
    return pd.Series([x.min(),x.max()], index=['min','max'])
frame.apply
. b d e
min -0.683356 -1.240582 -0.921106
max -0.178136 0.044398 0.958905
frame.apply(f,axis=1)
. min max
Utha -0.683356 -0.022012
Ohio -1.240582 -0.230113
Texas -0.487803 0.958905
Oregon -1.201671 -0.178136

如果你想得到frame中各个浮点值的各个格式化字符串,使用applymap

format=lambda x: '%.2f' % x
frame.applymap(format)
. b d e
Utha -0.68 -0.58 -0.02
Ohio -0.23 -1.24 -0.50
Texas -0.49 0.04 0.96
Oregon -0.18 -1.20 -0.92

之所以叫applymap,是因为Series中有个函数叫map

frame['e'].map(format)
Utha      -0.02
Ohio      -0.50
Texas      0.96
Oregon    -0.92
Name: e, dtype: objec

rank

rank函数返回从小到大排序的下标,对于平级的数,rank是通过“为各组分配一个平均排名”的方式破坏评级关系

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

0    6.5
1    1.0
2    6.5
3    4.5
4    3.0
5    2.0
6    4.5
dtype: float64

最小的为1
根据值在源数据中出现的顺序给出排名

obj.rank(method='first')
0    6.0
1    1.0
2    7.0
3    4.0
4    3.0
5    2.0
6    5.0
dtype: float64

这里写图片描述

也可以按照降序进行排名

obj.rank(ascending=False, method='max')
0    2.0
1    7.0
2    2.0
3    4.0
4    5.0
5    6.0
6    4.0
dtype: float64

最小的是7

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

from pandas import Series,DataFrame

#虽然pandas的很多函数(如reindex)要求标签唯一,但是并不具有强制性

obj = Series(range(5),index = list('aabbc'))

print obj

#索引是否唯一用is_unique看是否唯一

print obj.index.is_unique

#对于重复值的索引,选取的话返回一个Series,唯一的索引返回一个标量

print obj['a']

#对于DataFrame也是如此

df = DataFrame(np.random.randn(4,3),index = list('aabb'))

print df

print df.ix['b']

#####自己导入数据的时候数据处理之前可以做一下index唯一性等,自己创建DataFrame注意不能这样
目录
相关文章
|
20天前
|
数据挖掘 数据处理 索引
Pandas数据重命名:列名与索引为标题
Pandas 是强大的数据分析工具,支持灵活的数据结构和操作。本文介绍如何使用 Pandas 对 `DataFrame` 的列名和索引进行重命名,包括直接赋值法、`rename()` 方法及索引修改。通过代码示例展示了具体操作,并讨论了常见问题如名称冲突、数据类型不匹配及 `inplace` 参数的使用。掌握这些技巧可使数据更清晰易懂,便于后续分析。
62 29
|
5月前
|
数据采集 数据可视化 数据挖掘
数据分析大神养成记:Python+Pandas+Matplotlib助你飞跃!
在数字化时代,数据分析至关重要,而Python凭借其强大的数据处理能力和丰富的库支持,已成为该领域的首选工具。Python作为基石,提供简洁语法和全面功能,适用于从数据预处理到高级分析的各种任务。Pandas库则像是神兵利器,其DataFrame结构让表格型数据的处理变得简单高效,支持数据的增删改查及复杂变换。配合Matplotlib这一数据可视化的魔法棒,能以直观图表展现数据分析结果。掌握这三大神器,你也能成为数据分析领域的高手!
99 2
|
2月前
|
机器学习/深度学习 算法 数据挖掘
数据分析的 10 个最佳 Python 库
数据分析的 10 个最佳 Python 库
115 4
数据分析的 10 个最佳 Python 库
|
2月前
|
机器学习/深度学习 数据采集 数据挖掘
解锁 Python 数据分析新境界:Pandas 与 NumPy 高级技巧深度剖析
Pandas 和 NumPy 是 Python 中不可或缺的数据处理和分析工具。本文通过实际案例深入剖析了 Pandas 的数据清洗、NumPy 的数组运算、结合两者进行数据分析和特征工程,以及 Pandas 的时间序列处理功能。这些高级技巧能够帮助我们更高效、准确地处理和分析数据,为决策提供支持。
53 2
|
2月前
|
SQL 数据挖掘 Python
数据分析编程:SQL,Python or SPL?
数据分析编程用什么,SQL、python or SPL?话不多说,直接上代码,对比明显,明眼人一看就明了:本案例涵盖五个数据分析任务:1) 计算用户会话次数;2) 球员连续得分分析;3) 连续三天活跃用户数统计;4) 新用户次日留存率计算;5) 股价涨跌幅分析。每个任务基于相应数据表进行处理和计算。
|
3月前
|
机器学习/深度学习 数据采集 算法
探索Python科学计算的边界:NumPy、Pandas与SciPy在大规模数据分析中的高级应用
【10月更文挑战第5天】随着数据科学和机器学习领域的快速发展,处理大规模数据集的能力变得至关重要。Python凭借其强大的生态系统,尤其是NumPy、Pandas和SciPy等库的支持,在这个领域占据了重要地位。本文将深入探讨这些库如何帮助科学家和工程师高效地进行数据分析,并通过实际案例来展示它们的一些高级应用。
79 0
探索Python科学计算的边界:NumPy、Pandas与SciPy在大规模数据分析中的高级应用
|
3月前
|
机器学习/深度学习 数据采集 数据可视化
数据分析之旅:用Python探索世界
数据分析之旅:用Python探索世界
39 2
|
3月前
|
数据采集 数据挖掘 API
Python数据分析加速器:深度挖掘Pandas与NumPy的高级功能
在Python数据分析的世界里,Pandas和NumPy无疑是两颗璀璨的明星,它们为数据科学家和工程师提供了强大而灵活的工具集,用于处理、分析和探索数据。今天,我们将一起深入探索这两个库的高级功能,看看它们如何成为数据分析的加速器。
55 1
|
3月前
|
数据挖掘 索引 Python
Python数据分析篇--NumPy--进阶
Python数据分析篇--NumPy--进阶
30 0
|
3月前
|
数据挖掘 索引 Python
Python数据分析篇--NumPy--入门
Python数据分析篇--NumPy--入门
59 0