20个Pandas函数详解
作者|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']
ar.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]。可以⽤这些序作排序操作
groupby是什么函数
df['rank_1'] = df['value_1'].rank()
df
10.Melt
Melt⽤于将宽数据帧转换为窄数据帧。我所说的wide是指具有⼤量列的数据帧。
⼀些数据帧的结构是连续的度量或变量⽤列表⽰。在某些情况下,将这些列表⽰为⾏可能更适合我们的任务。考虑以下数据帧:
我们有三个不同的城市,在不同的⽇⼦进⾏测量。我们决定将这些⽇⼦表⽰为列中的⾏。还将有⼀列显⽰测量值。我们可以通过使⽤Melt函数轻松实现:
lt(id_vars=['city'])

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。