最全的pandas面试基础100题目

最全的pandas面试基础100题目,第1张

在进行下面的题目 *** 作时,一定要先导入上面的两个数据分析包 pandas、numpy

1 如何用Python的列表创建一个series

输出:

一个series是一个一维的标记数组,可以容纳任何数据类型(整数、字符串、浮点数、Python对象等)。必须记住,与Python列表不同,一个series总是包含相同类型的数据。

2如何使用列表创建一个DataFrame

输出:

3如何使用Series 字典对象生成 DataFrame

输出:

4如何在pandas中创建一个空的DataFrame?

要创建一个完全空的pandas dataframe,我们使用以下 *** 作:

输出:

已知有这样的数据,如何进行查看

输出:

2如何查看尾部数据

3如何快速查看数据的统计摘要

4如何查询索引和列名

1简述Pandas Index

在panda中建立索引意味着简单地从DataFrame中选择特定的数据行和列。

pandas支持四种类型的多轴索引,它们是:

它们统称为索引器。这些是迄今为止索引数据最常见的方法。这四个函数有助于从DataFrame获取元素、行和列。

2Pandas 定义重新索引(Reindexing)

重新索引会更改DataFrame的行标签和列标签。重新索引意味着使数据符合特定轴上给定的一组标签。

多个 *** 作可以通过像这样的索引来完成:

输出:

3如何设置索引?

panda set_index() 是一种将列表、序列或dataframe设置为dataframe索引的方法。

语法:

DataFrameset_index(keys, inplace=False)

参数:

改变索引列

在本例中,名称列被用作DataFrame的索引列

输出:

如输出图像所示,以前索引列是一系列数字

Before Operation

After Operation

4如何重置索引

Pandas Seriesreset_index()

函数的作用是:生成一个新的DataFrame或带有重置索引的Series。

例1: 使用 Seriesreset_index() 函数重置给定Series对象的索引

输出:

现在,我们将使用Seriesreset_index()函数来重置给定的series对象的索引

输出 :

从输出中可以看到,该 Seriesreset_index() 函数已将给定Series对象的索引重置为默认值。它保留了索引,并将其转换为列。

11先创建数据:

12选择单列,产生 Series

详见 按标签选择 。

21用标签提取一行数据:

详见 按位置选择 。

31用整数位置选择:

41用单列的值选择数据:

51用索引自动对齐新增列的数据:

1如何得到一个数列的最小值、第25百分位、中值、第75位和最大值

输出:

Pandas dataframemean(axis=None) 函数返回所请求轴(axis=0代表对列进行求平均值,axis=1代表对行进行求平均值)的值的平均值。

示例: 使用 mean() 函数查找索引轴上所有观测值的平均值。

输出:

让我们使用datafame mean()函数来查找索引轴上的平均值。

3如何将函数应用到DataFrame中的每个数据元素

可以使用 apply() 函数以便将函数应用于给定dataframe中的每一行。让我们来看看我们完成这项任务的方式。

实例:

输出:

4如何在panda中获得一个DataFrame的行数和列数

输出:

获取df的行和列计数

输出:

5如何在panda DataFrame中获得列值的总和

Pandas dataframesum() 函数返回所请求轴的值的和

语法: DataFramesum(axis=None, skipna=None, )

参数:

示例1: 使用 sum() 函数查找索引轴上所有值的总和

现在求出沿索引轴的所有值的和。我们将跳过计算和时的NaN值。

输出:

如何将新行追加到pandas DataFrame?

Pandas dataframeappend() 函数的作用是:将其他dataframe的行追加到给定的dataframe的末尾,返回一个新的dataframe对象。

语法:

DataFrameappend( ignore_index=False,)

参数:

示例1: 创建两个数据框,然后将第二个附加到第一个。

现在将df2附加到df1的末尾

输出:

请注意,第二个DataFrame的索引值保留在附加的DataFrame中。如果我们不希望发生这种情况,则可以设置ignore_index = True。

输出 :

“group by” 指的是涵盖下列一项或多项步骤的处理流程:

详见 分组 。

输出:

1先分组,再用 sum() 函数计算每组的汇总数据:

输出:

2多列分组后,生成多层索引,也可以应用 sum 函数:

输出:

如何将numpy数组转换为给定形状的DataFrame

输出:

输出:

透视表是一种可以对数据动态排布并且分类汇总的表格格式,在pandas中它被称作pivot_table。

pivot_table(data, values=None, index=None, columns=None)

参数:

详见: 数据透视表

打印输出:

用上述数据生成数据透视表非常简单:

返回结果:

1如何将列添加到pandas DataFrame?

源数据:

输出:

输出:

2如何向panda DataFrame添加索引、行或列

向DataFrame添加索引

如果您创建了一个DataFrame, panda允许将输入添加到索引参数中。它将确保您拥有所需的索引。否则,在默认情况下,DataFrame包含一个数值索引,该索引从0开始,在DataFrame的最后一行结束。

向DataFrame添加行、列

我们可以使用loc、iloc和ix将行、列插入到DataFrame中。

添加具有特定索引名的行:

输出:

3如何在panda DataFrame上进行迭代

您可以通过结合使用for循环和对DataFrame的iterrows()调用来遍历DataFrame的行。

输出:

4我们如何排序DataFrame?

我们可以通过以下几种有效地在DataFrame中执行排序:

(1)按标签

可以使用sort_index()方法对数据dataframe进行排序。可以通过传递axis参数和排序顺序来实现。默认情况下,按升序对行标签进行排序。

注:《利用python进行数据分析》的学习笔记-pandas

import pandas as pd

import numpy as np

一维数组,包含一个数组对象,一个索引对象,索引对象默认为0开始的递增数字,可通过index=[idx1, idx2, ]参数指定

可通过索引选取/修改相应的数据,选取:data=series[idx], 修改:series[[idxm, idxn, ]]=[dm, dn, ]

series可看成定长有序字典,索引到数据的映射,series可用于字典参数的函数中。idxn in series返回True/False

多个series做算术 *** 作,会自动对齐不同索引的数据,无此数据自动填充NaN

可看作多个series组成的表单,dataframe有两种索引,与series相同的index行索引,还有columns列索引

选取/修改一行数据    dataframeloc['index']

选取/修改一列数据    dataframe['column'], dataframecolumn

objreindex(newIndex)                                                                                                    #适用于series与dataframe

objreindex(index=newIndex, columns=newcolumns)                                                    #dataframe需对行索引列索引都重新索引时

objreindex(index=newindex, columns=newcolumns, fill_value=100)                            #指定填充值,不指定时填充NaN

objreindex(index=newindex, columns=newcolumns, fill_value=100, method='ffill')      #指定填充方法ffill/pad(前向填充),bfill/backfill(后向填充)

obj=objdrop(index, axis=0)

obj=objdrop([col1, col2, ], axis=1)

axis默认为0,删除列数据时指定axis为1

series

obj = pdSeries(range(5), index=list('abcde'))

取单数            obj[2],      obj['c']

切片取数        obj[2:5],    obj['a':'c']

不连续取数    obj[1,3],    obj['a','c','d']

过滤               obj[obj>2],

修改               obj[3]=0,

注:series切片不用于python数据结构的切片,series的切片包含末端,即python:[start, end), series:[start, end]

dataframe

obj = pdDataFrame(nparange(15)reshape((3,5)),

                        index = ['one', 'two', 'three'],

                        columns = list('abcde') )

取单列             objloc[:, 'c'],                             objiloc[:, 2],                            objxs('c', axis=1),                       obj['c'], 

取单行             objloc['one'],                            objiloc[1],                               objxs('one', axis=0), 

取连续行         objloc['one':'three'],                  objiloc[1:3],                obj[:2], 

取连续列         objloc[:, 'b':'d'],                         objiloc[:, 2:4],

取不连续行     objloc[['one','three']]                 objiloc[[0,2]],

取不连续列     objloc[:, ['b', 'e']]                       objiloc[:, [1,4]],

取单行单列     objloc['two', 'd']                         objiloc[2, 4]

取连续行列     objloc['one':'three', 'b':'d']          objiloc[:2, 2:4]

取不连续行列  objloc[['one','three'], ['b':'d']]     objiloc[[0,2], [1,4]]

根据列值过滤行      objloc[obj['c']%2==0, :]      

此处吐个槽,这个切片方法一会儿只能取单列,一会儿只能取连续行,一会儿包含终止项,一会儿不包含,我人都傻了

loc/iloc方法接收两个参数,第一个是行,第二个是列,都可切片,也都可指定索引,列参数可以不写,默认取所有列数据

下面总结下这个花哨的切片!

dataframe有两种索引,行索引/列索引。每种索引包含两类用法,索引名称(对应dfloc)/索引下标对应(dfiloc)

①    df[columnName]                                             取单列数据,只能用列名,不能使用列下标,不能用于取单行

②    df[lineName1: lineName2]                              取连续行数据,使用行名时,包含末尾项,即[start,end]

③    df[lineIndex1: lineIndex2]                                取连续行数据,使用行下标时,不包含末尾项 ,即[start,end)

④    dfloc['line2':'line4']                                          取连续行数据,使用行名时,包含末尾项,即[start,end]      

⑤    dfiloc[2:4]                                                       取连续行数据,使用行下标时,不包含末尾项 ,即[start,end) 

⑥    dfloc[:, columnName1:columnName2]          取连续列,使用列名时,包含末尾项,即[start,end]    

⑦    dfiloc[:, columnIndex1:columnIndex2]           取连续列,使用列下标时,不包含末尾项,即[start,end)

⑧    dfloc[[lineName1, ], [columnName1, ]]    使用行名/列名取不连续行列

⑨    dfiloc[[lineIndex1, ], [columnIndex1, ]]     使用行下标/列下标取不连续行列

以前用的时候总觉得奇奇怪怪的,花了一下午时间一个一个尝试终于捋顺了,欧耶! (〃 ̄︶ ̄) 人 ( ̄︶ ̄〃)

DataFrame直接切片,即df[args],可用于指定列名取单列数据,可用于指定行名/行下标取连续多行数据

                                                        取单行数据不可直接切片,需使用loc/iloc方法

DataFrameloc(line, column)    用于按索引名称取行/列数据,此时,首尾项都会被取出

                                                 参数line指定行索引名称,参数2指定列索引名称(可省略,默认选取所有列)。

DataFrameiloc(line, column)   用于按索引下标取行/列数据,此时,尾项数据不会被取出

                                                 参数line指定行索引下标,参数2指定列索引下标(可省略,默认选取所有列)。

导入 Pandas:

查看 Pandas 版本信息:

Pandas 的数据结构:Pandas 主要有 Series(一维数组),DataFrame(二维数组),Panel(三维数组),Panel4D(四维数组),PanelND(更多维数组)等数据结构。其中 Series 和 DataFrame 应用的最为广泛。

Series 是一维带标签的数组,它可以包含任何数据类型。包括整数,字符串,浮点数,Python 对象等。Series 可以通过标签来定位。

DataFrame 是二维的带标签的数据结构。我们可以通过标签来定位数据。这是 NumPy 所没有的。

Pandas 中,Series 可以被看作由 1 列数据组成的数据集。

创建 Series 语法:s = pdSeries(data, index=index),可以通过多种方式进行创建,以下介绍了 3 个常用方法。

从列表创建 Series:

从 Ndarray 创建 Series:

从字典创建 Series:

修改 Series 索引:

Series 纵向拼接:

Series 按指定索引删除元素:

Series 修改指定索引元素:

Series 按指定索引查找元素:

Series 切片 *** 作:

Series 加法运算:

Series 的加法运算是按照索引计算,如果索引不同则填充为 NaN(空值)。

Series 减法运算:

Series的减法运算是按照索引对应计算,如果不同则填充为 NaN(空值)。

Series 乘法运算:

Series 的乘法运算是按照索引对应计算,如果索引不同则填充为 NaN(空值)。

Series 除法运算:

Series 的除法运算是按照索引对应计算,如果索引不同则填充为 NaN(空值)。

Series 求中位数:

Series 求和:

Series 求最大值:

Series 求最小值:

与 Sereis 不同,DataFrame 可以存在多列数据。一般情况下,DataFrame 也更加常用。

通过 NumPy 数组创建 DataFrame:

通过字典数组创建 DataFrame:

查看 DataFrame 的数据类型:

预览 DataFrame 的前 5 行数据:

查看 DataFrame 的后 3 行数据:

查看 DataFrame 的索引:

查看 DataFrame 的列名:

查看 DataFrame 的数值:

查看 DataFrame 的统计数据:

DataFrame 转置 *** 作:

对 DataFrame 进行按列排序:

对 DataFrame 数据切片:

对 DataFrame 通过标签查询(单列):

对 DataFrame 通过标签查询(多列):

对 DataFrame 通过位置查询:

DataFrame 副本拷贝:

判断 DataFrame 元素是否为空:

添加列数据:

根据 DataFrame 的下标值进行更改。:

根据 DataFrame 的标签对数据进行修改:

DataFrame 求平均值 *** 作:

对 DataFrame 中任意列做求和 *** 作:

将字符串转化为小写字母:

将字符串转化为大写字母:

对缺失值进行填充:

删除存在缺失值的行:

DataFrame 按指定列对齐:

CSV 文件写入:

CSV 文件读取:

Excel 写入 *** 作:

Excel 读取 *** 作:

建立一个以 2018 年每一天为索引,值为随机数的 Series:

统计s 中每一个周三对应值的和:

统计s中每个月值的平均值:

将 Series 中的时间进行转换(秒转分钟):

UTC 世界时间标准:

转换为上海所在时区:

不同时间表示方式的转换:

创建多重索引 Series:

构建一个 letters = ['A', 'B', 'C'] 和 numbers = list(range(10))为索引,值为随机数的多重索引 Series。

多重索引 Series 查询:

多重索引 Series 切片:

根据多重索引创建 DataFrame:

创建一个以 letters = ['A', 'B'] 和 numbers = list(range(6))为索引,值为随机数据的多重索引 DataFrame。

多重索引设置列名称:

DataFrame 多重索引分组求和:

DataFrame 行列名称转换:

DataFrame 索引转换:

DataFrame 条件查找:

查找 age 大于 3 的全部信息

根据行列索引切片:

DataFrame 多重条件查询:

查找 age<3 且为 cat 的全部数据。

DataFrame 按关键字查询:

DataFrame 按标签及列名查询。:

DataFrame 多条件排序:

按照 age 降序,visits 升序排列

DataFrame 多值替换:

将 priority 列的 yes 值替换为 True,no 值替换为 False。

DataFrame 分组求和:

使用列表拼接多个 DataFrame:

找出 DataFrame 表中和最小的列:

DataFrame 中每个元素减去每一行的平均值:

DataFrame 分组,并得到每一组中最大三个数之和:

当分析庞大的数据时,为了更好的发掘数据特征之间的关系,且不破坏原数据,就可以利用透视表 pivot_table 进行 *** 作。

透视表的创建:

新建表将 A, B, C 列作为索引进行聚合。

透视表按指定行进行聚合:

将该 DataFrame 的 D 列聚合,按照 A,B 列为索引进行聚合,聚合的方式为默认求均值。

透视表聚合方式定义:

上一题中 D 列聚合时,采用默认求均值的方法,若想使用更多的方式可以在 aggfunc 中实现。

透视表利用额外列进行辅助分割:

D 列按照 A,B 列进行聚合时,若关心 C 列对 D 列的影响,可以加入 columns 值进行分析。

透视表的缺省值处理:

在透视表中由于不同的聚合方式,相应缺少的组合将为缺省值,可以加入 fill_value 对缺省值处理。

在数据的形式上主要包括数量型和性质型,数量型表示着数据可数范围可变,而性质型表示范围已经确定不可改变,绝对型数据就是性质型数据的一种。

绝对型数据定义:

对绝对型数据重命名:

重新排列绝对型数据并补充相应的缺省值:

对绝对型数据进行排序:

对绝对型数据进行分组:

缺失值拟合:

在FilghtNumber中有数值缺失,其中数值为按 10 增长,补充相应的缺省值使得数据完整,并让数据为 int 类型。

数据列拆分:

其中From_to应该为两独立的两列From和To,将From_to依照_拆分为独立两列建立为一个新表。

字符标准化:

地点的名字都不规范(如:londON应该为London)需要对数据进行标准化处理。

删除坏数据加入整理好的数据:

将最开始的 From_to 列删除,加入整理好的 From 和 to 列。

去除多余字符:

如同 airline 列中许多数据有许多其他字符,会对后期的数据分析有较大影响,需要对这类数据进行修正。

格式规范:

在 RecentDelays 中记录的方式为列表类型,由于其长度不一,这会为后期数据分析造成很大麻烦。这里将 RecentDelays 的列表拆开,取出列表中的相同位置元素作为一列,若为空值即用 NaN 代替。

信息区间划分:

班级一部分同学的数学成绩表,如下图所示

但我们更加关心的是该同学是否及格,将该数学成绩按照是否>60来进行划分。

数据去重:

一个列为A的 DataFrame 数据,如下图所示

尝试将 A 列中连续重复的数据清除。

数据归一化:

有时候,DataFrame 中不同列之间的数据差距太大,需要对其进行归一化处理。

其中,Max-Min 归一化是简单而常见的一种方式,公式如下:

Series 可视化:

DataFrame 折线图:

DataFrame 散点图:

DataFrame 柱形图:

obj : 参与合并的对象,如:[df1, df2]

axis : 合并方向

join : 合并方式,outer 为外链接,取交集

join_axes : 设置需要显示的列名

ignore_index : 是否忽略原来DataFrame/Series 对象的索引,重新排列

keys : 为数据源设置多级索引标签

levels :如果设置keys的话, 指定用作层次化索引各级别(内层索引)上的索引

names :用于创建分层级别的名称,如果设置keys或levels的话

verify_integrity : 检查是否出现重复索引,引发异常

left :参与合并的左侧DataFrame

right :参与合并的右侧DataFrame

how :连接方式:‘inner’(默认,交集);还有,‘outer’、‘left’、‘right’

on :用于连接的列名,必须同时存在于左右两个DataFrame对象中,如果位指定,则以left和right列名的交集作为连接键

left_on :左侧DataFarme中用作连接键的列

right_on :右侧DataFarme中用作连接键的列

left_index :将左侧的行索引用作其连接键

right_index : 将右侧的行索引用作其连接键

sort :根据连接键对合并后的数据进行排序,默认为True。有时在处理大数据集时, 禁用该选项 可获得更好的性能

suffixes :字符串值元组,用于追加到重叠列名的末尾,默认为(‘_x’,‘_y’)例如,左右两个DataFrame对象都有‘data’,则结果中就会出现‘data_x’,‘data_y’

copy :设置为False,可以在某些特殊情况下避免将数据复制到结果数据结构中。默认总是赋值

用法入门比较简单, 前人的博客写的蛮详尽了

Pandas详解十五之利用GroupBy技术进行分组

补充几点:

data : 用于制作数据透视表的 DataFrame的某列数据,输入列名即可

index : 行分组标签

columns : 列分组标签

aggfunc : 汇总计算方法,默认为(mean) 可以用字典为不同的列指定不同的累计函数,此时data可以缺失

fill_value :填充缺失值

dropna : 剔除缺失值

margins : 是否对边际进行aggfunc汇总

margins_name : 边际行/列的名称

以上就是关于最全的pandas面试基础100题目全部的内容,包括:最全的pandas面试基础100题目、pandas索引取数、14Pandas 百题大冲关等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9805572.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存