作者|Soner Yıldırım
编译|VK
起源|Towards Data Science
Pandas是一个python数据分析库。它提供了许多函数和办法来放慢数据分析过程。pandas之所以如此广泛,是因为它具备弱小的性能,以及他简略的语法和灵活性。
在这篇文章中,我将举例来解释20个罕用的pandas函数。有些是很常见的,我敢肯定你以前用过。有些对你来说可能是新的。所有函数都将为你的数据分析过程减少价值。
import numpy as npimport 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()10df.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.dtypesA object B object C object D object dtype: object
所有的数据类型都是object。让咱们看看推断的数据类型是什么:
df2.infer_objects().dtypesA 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/