关于人工智能:20个Pandas函数详解

43次阅读

共计 4866 个字符,预计需要花费 13 分钟才能阅读完成。

作者 |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/

正文完
 0