作者 |Soner Yıldırım
编译 |VK
起源 |Towards Data Science
Pandas 是一个 python 数据分析库。它提供了许多函数和办法来放慢数据分析过程。pandas 之所以如此广泛,是因为它具备弱小的性能,以及他简略的语法和灵活性。
在这篇文章中,我将举例来解释 20 个罕用的 pandas 函数。有些是很常见的,我敢肯定你以前用过。有些对你来说可能是新的。所有函数都将为你的数据分析过程减少价值。
import numpy as np
import pandas as pd
1.query
咱们有时须要依据条件过滤一个数据帧。过滤数据帧的一个简略办法是 query 函数。让咱们首先创立一个示例数据帧。
values_1 = np.random.randint(10, size=10)
values_2 = np.random.randint(10, size=10)
years = np.arange(2010,2020)
groups = ['A','A','B','A','B','B','C','A','C','C']
df = pd.DataFrame({'group':groups, 'year':years, 'value_1':values_1, 'value_2':values_2})
df
应用查问函数非常简单,只须要编写过滤条件。
df.query('value_1 < value_2')
2.insert
当咱们想向 dataframe 增加一个新列时,默认状况下会在开端增加它。然而,pandas 提供了应用 insert 函数使得咱们能够在任何地位增加新列。
咱们须要通过传递索引作为第一个参数来指定地位。此值必须是整数。列索引从零开始,就像行索引一样。第二个参数是列名,第三个参数是对象,这些对象能够是Series 或数组。
# 新建列
new_col = np.random.randn(10)
#在地位 2 插入新列
df.insert(2, 'new_col', new_col)
df
3.Cumsum
数据帧蕴含 3 个不同组的年份值。咱们可能只对某些状况下的累积值感兴趣。Pandas 提供了一个易于应用的函数来计算累计和,即cumsum。
如果咱们只利用 cumsum 函数,group 里的(A,B,C)将被疏忽,因为咱们无奈辨别不同的组。咱们能够利用 groupby 和 cumsum 函数,这样就能够辨别出不同的组。
df['cumsum_2'] = df[['value_2','group']].groupby('group').cumsum()
df
4.Sample
Sample 办法容许你从序列或数据帧中随机抉择值。当咱们想从一个散布中抉择一个随机样本时,它很有用。
sample1 = df.sample(n=3)
sample1
咱们用 n 参数指定值的数目,但咱们也能够将比率传递给 frac 参数。例如,0.5 将返回一半的行。
sample2 = df.sample(frac=0.5)
sample2
为了取得可反复的样本,咱们能够应用随机的状态参数。如果将整数值传递给 random_state,则每次运行代码时都将生成雷同的示例。
5. Where
“Where”用于依据条件替换行或列中的值。默认的替换值是 NaN,然而咱们也能够指定替换的值。
df['new_col'].where(df['new_col'] > 0 , 0)
“where”的工作形式是抉择符合条件的值,其余值替换为指定值。
where(df[‘new_col’]>0, 0)抉择“new_col”中大于 0 的所有值,其余值替换为 0。因而,这里也能够视为掩码操作。
重要的一点是,Pandas 和 Numpy 的“where”并不完全相同。咱们能够用略微不同的语法来达到雷同的成果。DataFrame.where按原数据抉择符合条件的值,其余值将替换为指定的值。Np.where还须要指定一个新数据。以下两行返回雷同的后果:
df['new_col'].where(df['new_col'] > 0 , 0)
np.where(df['new_col'] < 0, df['new_col'], 0)
6.Isin
在解决数据帧时,咱们常常应用过滤或抉择办法。Isin 办法是一种先进的过滤办法。例如,咱们能够依据抉择列表过滤值。
years = ['2010','2014','2017']
df[df.year.isin(years)]
7.Loc and iloc
Loc 和 iloc 用于抉择行和列。
- loc:按标签抉择
- iloc:按地位抉择
loc用于按标签抉择数据。列的标签是列名。行标签要分状况,如果咱们不调配任何特定的索引,pandas 默认创立整数索引。iloc 按地位索引数据
应用 iloc 抉择前 3 行和前 2 列:
应用 loc 抉择前 3 行和前 2 列:
注:当应用 loc 时,切片失去的后果包含索引的边界,而应用 iloc 则不包含这些边界。
8.Pct_change
此函数用于计算一系列值的变动百分比。假如咱们有一个蕴含 [2,3,6] 的序列。如果咱们对这个序列利用 pct_change,则返回的序列将是[NaN,0.5,1.0]。
从第一个元素到第二个元素减少了 50%,从第二个元素到第三个元素减少了 100%。Pct_change 函数用于比拟元素工夫序列中的变动百分比。
df.value_1.pct_change()
9.Rank
Rank 函数为值调配序。假如咱们有一个蕴含 [1,7,5,3] 的序列 s。调配给这些值的序为[1,4,3,2]。能够用这些序作排序操作
df['rank_1'] = df['value_1'].rank()
df
10.Melt
Melt 用于将宽数据帧转换为窄数据帧。我所说的 wide 是指具备大量列的数据帧。
一些数据帧的构造是间断的度量或变量用列示意。在某些状况下,将这些列示意为行可能更适宜咱们的工作。思考以下数据帧:
咱们有三个不同的城市,在不同的日子进行测量。咱们决定将这些日子示意为列中的行。还将有一列显示测量值。咱们能够通过应用 Melt 函数轻松实现:
df_wide.melt(id_vars=['city'])
默认状况下,会给出变量和值列名。咱们能够应用 melt 函数的 var_name 和 value_name 参数来指定新的列名。
11.Explode
假如你的数据集在一个观测 (行) 中蕴含一个因素的多个条目,但你心愿在独自的行中剖析它们。
咱们想在不同的行上看到“day”1 在 ID 为 c 上的测量值,用 explode 来实现。
df1.explode('measurement').reset_index(drop=True)
12.Nunique
Nunique 统计列或行上的惟一条目数。它在分类特色中十分有用,特地是在咱们当时不晓得类别数量的状况下。让咱们看看咱们的初始数据帧:
df.year.nunique()
10
df.group.nunique()
3
咱们能够间接将 nunique 函数利用于 dataframe,并查看每列中惟一值的数量:
如果 axis 参数设置为 1,nunique 将返回每行中惟一值的数目。
13.lookup
它能够用于依据其余行 - 列对上的值在数据帧中查找值。假如咱们有以下数据帧:
每天,咱们有 4 集体的测量数据和一个列,其中包含这 4 集体的名字。
咱们要创立一个新列,该列显示“person”列中人员对应他们的度量。因而,对于第一行,新列中的值将是 4(“Alex”列中的值)。
df['Person_point'] = df.lookup(df.index, df['Person'])
df
14.Infer_objects
Pandas 反对宽泛的数据类型,其中之一就是 object。对象蕴含文本或混合 (数字和非数字) 值。
然而,如果有其余选项可用,则不倡议应用对象数据类型。应用更具体的数据类型,某些操作执行得更快。例如,对于数值,咱们更喜爱应用整数或浮点数据类型。
infer_objects 尝试为对象列推断更好的数据类型。思考以下数据帧:
df2.dtypes
A object
B object
C object
D object
dtype: object
所有的数据类型都是 object。让咱们看看推断的数据类型是什么:
df2.infer_objects().dtypes
A int64
B float64
C bool
D object
dtype: object
它可能看起来没什么用,但在有很多列时相对有用。
15.Memory_usage
Memory_usage 返回每行应用的内存量(以字节为单位)。它十分有用,尤其是当咱们解决大型数据帧时。思考上面的数据帧,其中有一百万行。
df_large = pd.DataFrame({'A': np.random.randn(1000000),
'B': np.random.randint(100, size=1000000)})
df_large.shape
(1000000, 2)
以及每列的内存应用状况(以字节为单位):
df_large.memory_usage()
Index 128
A 8000000
B 8000000
dtype: int64
整个数据帧的内存使用量(MB):
df_large.memory_usage().sum() / (1024**2)
15.2589111328125
16.Describe
形容函数计算数字列的根本统计信息,这些列包含计数、平均值、标准差、最小值和最大值、中值、第一个和第三个四分位数。因而,它提供了数据帧的统计摘要。
17.Merge
Merge()依据共享列中的值组合数据帧。思考以下两个数据帧。
咱们能够依据列中的共享值合并它们。设置合并条件的参数是“on”参数。
df1 和 df2 是基于 column_a 中的公共值进行合并的,merge 函数的 how 参数容许以不同的形式组合数据帧。“外部”、“内部”、“左侧”、“右侧”的可能值。
- inner:仅在 on 参数指定的列中具备雷同值的行(how 参数的默认值)
- outer:所有行
- left:左数据帧中的所有行
- right:右数据帧中的所有行
相似于 sql 语句中的 join
18.Select_dtypes
Select_dtypes 函数依据对数据类型设置的条件返回数据帧列的子集。它容许应用 include 和 exlude 参数蕴含或排除某些数据类型。
df.select_dtypes(include='int64')
df.select_dtypes(exclude='int64')
19.replace
顾名思义,它容许替换数据帧中的值。
df.replace('A', 'A_1')
第一个参数是要替换的值,第二个参数是新值。
咱们也能够在一个字典中同时进行多个替换。
df.replace({'A':'A_1', 'B':'B_1'})
20.Applymap
Applymap 函数用于将函数利用于 dataframe 元素。
请留神,如果操作的向量化版本可用,那么它应该优先于 applymap。例如,如果咱们想将每个元素乘以一个数字,咱们不须要也不应该应用 applymap 函数。在这种状况下,简略的向量化操作(例如 df*4)要快得多。
然而,在某些状况下,咱们可能无奈抉择向量化操作。例如,咱们能够应用 pandas dataframes 的 Style 属性来更改 dataframe 的款式。以下函数将负值的色彩更改为红色。
def color_negative_values(val):
color = 'red' if val < 0 else 'black'
return 'color: %s' % color
咱们须要应用 applymap 函数将此函数利用于数据帧。
df3.style.applymap(color_negative_values)
原文链接:https://towardsdatascience.co…
欢送关注磐创 AI 博客站:
http://panchuang.net/
sklearn 机器学习中文官网文档:
http://sklearn123.com/
欢送关注磐创博客资源汇总站:
http://docs.panchuang.net/