Python Pandas面试题

17 Mar 2025 | 阅读 17 分钟
Python Pandas interview questions

以下是顶尖的、经常被问到的Python Pandas面试题及答案列表。

1) 定义Pandas/Python pandas?

Pandas被定义为一个开源库,它在Python中提供高性能的数据处理。Pandas的名字来源于“Panel Data”这个词,它指的是经济计量学中的多维数据。它可以在Python中用于数据分析,并由Wes McKinney于2008年开发。它能够执行数据处理和分析所需的五个重要步骤,而与数据的来源无关,即加载、操作、准备、建模和分析。


2) Mention the different types of Data Structures in Pandas?

Pandas提供两种由pandas库支持的数据结构:SeriesDataFrames。这两种数据结构都构建在NumPy之上。

  • Series是支持任何数据类型的、一维的、带标签的数组。
  • DataFrame是二维的、带标签的数据结构,其列可以是不同类型的(数字、字符串、布尔值等)。
  • Index是Series和DataFrame中轴标签的不可变数组。
  • Panel是三维数据结构。然而,在Pandas的最新版本中,Panels已被弃用。

3) Define Series in Pandas?

Series被定义为一个能够存储各种数据类型的、一维的数组。Series的行标签称为索引。通过使用“series”方法,我们可以轻松地将列表、元组和字典转换为Series。Series不能包含多个列。


4) How can we calculate the standard deviation from the Series?

Pandas的std()被定义为一个用于计算给定数字集、DataFrame、列和行的标准差的函数。

Series.std(axis=None, skipna=None, level=None, ddof=1, numeric_only=None, **kwargs)


5) Define DataFrame in Pandas?

DataFrame是pandas中一种广泛使用的数据结构,它处理带标签轴(行和列)的二维数组。DataFrame被定义为存储数据的标准方法,并具有两个不同的索引:行索引和列索引。它包含以下属性:

  • 列可以是异构类型,如int和bool。
  • 它可以看作是一个Series的字典结构,其中行和列都有索引。在列的情况下表示为“columns”,在行的情况下表示为“index”。

6) What are the significant features of the pandas Library?

Pandas库的关键特性如下:

  • 内存效率高:Pandas的设计注重内存效率,并针对性能进行了优化,使其适用于处理大型数据集。
  • 数据对齐:自动和显式的数据对齐是一个关键特性。对象可以显式地对齐到一组标签,或者根据标签或整数索引自动对齐。
  • 重塑:在Pandas的上下文中,重塑是指重新组织或转换数据结构。
  • 合并和连接:Pandas支持数据集的合并和连接,类似于SQL数据库。这对于组合来自不同来源的数据非常有用。
  • 时间序列:Pandas对处理时间序列数据提供了强大的支持,包括日期范围生成、频率转换和重采样。

7) Explain Reindexing in pandas?

Reindexing用于使DataFrame符合新的索引,并带有可选的填充逻辑。它会在前一个索引中不存在值的位置放置NA/NaN。除非新的索引产生的等效于当前的索引,并且copy的值为False,否则它会返回一个新的对象。它用于更改DataFrame的行和列的索引。


8) What is the name of Pandas library tools used to create a scatter plot matrix?

Scatter_matrix

散点图矩阵(Scatter matrix),也称为散点图网格或匹配图(matches plot),是数据集中不同变量之间关系的图形表示。它由一个散点图组成的网格组成,其中每个散点图显示两个变量之间的关系。如果数据集中有“n”个变量,则散点图矩阵将是一个“n x n”的网格。

在散点图矩阵中,矩阵中的每个单元格都代表两个特定变量的散点图。斜对角线上的单元格通常显示每个独立变量的直方图或核密度图,显示该变量上的值分布。


9) Define the different ways a DataFrame can be created in pandas?

我们可以通过以下方式创建DataFrame:

  • 列表
  • 字典的ndarray

示例-1:使用列表创建DataFrame

输出

	0
0   Python
1   Pandas

示例-2:从字典的ndarray创建DataFrame

输出

       ID      Department
0      101        B.Sc
1      102        B.Tech
2      103        M.Tech

10) Explain Categorical data in Pandas?

Categorical data被定义为Pandas数据类型,对应于统计学中的分类变量。分类变量通常用于接受有限的、通常是固定的可能值的数量。例如:性别、国家归属、血型、社会阶层、观察时间或通过李克特量表进行的评分。分类数据的所有值都在类别或np.nan中。

这种数据类型在以下情况下很有用:

  • 对于只包含少量不同值的字符串变量很有用。如果我们想节省一些内存,可以将字符串变量转换为分类变量。
  • 对于变量的词法顺序与逻辑顺序不符的情况很有用(“one”、“two”、“three”)。通过转换为分类变量并指定类别顺序,排序和最小/最大值将使用逻辑顺序而不是词法顺序。
  • 它可以作为其他Python库的信号,因为该列应被视为分类变量。

11) How will you create a series from dict in Pandas?

Series被定义为一个能够存储各种数据类型的、一维的数组。

我们可以从字典创建Pandas Series。

从字典创建Series

我们也可以从字典创建Series。如果将字典对象作为输入传递并且未指定索引,则将按排序顺序获取字典键来构建索引。

如果传递了索引,则将从字典中提取对应于索引中特定标签的值。

输出

x     0.0
y     1.0
z     2.0
dtype: float64

12) How can we create a copy of the series in Pandas?

我们可以使用以下语法创建Series的副本:

pandas.Series.copy
Series.copy(deep=True)

以上语句创建了一个深拷贝,其中包含数据和索引的副本。如果我们将deep的值设置为False,则既不会复制索引也不会复制数据。

注意:如果我们将deep=True,则会复制数据,但实际的Python对象不会递归复制,只会复制对象的引用。


13) How will you create an empty DataFrame in Pandas?

DataFrame是pandas中一种广泛使用的数据结构,它处理带标签轴(行和列)的二维数组。它被定义为存储数据的标准方法,并具有两个不同的索引:行索引和列索引。

创建空DataFrame

以下代码展示了如何在Pandas中创建空DataFrame:

输出

Empty DataFrame
Columns: []
Index: []

14) How will you add a column to a pandas DataFrame?

我们可以向现有DataFrame添加任何新列。以下代码演示了如何向现有DataFrame添加任何新列:

输出

Add new column by passing series
      one     two      three
a     1.0      1        20.0
b     2.0      2        40.0
c     3.0      3        60.0
d     4.0      4        NaN
e     5.0      5        NaN
f     NaN      6        NaN

Add new column using existing DataFrame columns
       one      two       three      four
a      1.0       1         20.0      21.0
b      2.0       2         40.0      42.0
c      3.0       3         60.0      63.0
d      4.0       4         NaN      NaN
e      5.0       5         NaN      NaN
f      NaN       6        NaN      NaN

15) How to add an Index, row, or column to a Pandas DataFrame?

向DataFrame添加索引

Pandas允许在创建DataFrame时添加“index”参数。这将确保您拥有所需的索引。如果您不指定输入,DataFrame默认包含一个数值索引,该索引从0开始,到DataFrame的最后一行结束。

向DataFrame添加行

我们可以使用.loc、ilocix来在DataFrame中插入行。

  • loc基本上作用于我们的索引标签。可以理解为如果我们插入loc[4],这意味着我们在查找DataFrame中索引标签为4的值。
  • iloc基本上作用于索引中的位置。可以理解为如果我们插入iloc[4],这意味着我们在查找DataFrame中位于索引'4'的值。
  • ix是一个复杂的情况,因为如果索引是基于整数的,我们向ix传递一个标签。ix[4]意味着我们在DataFrame中查找索引标签为4的值。但是,如果索引不只是基于整数的,ix将像iloc一样处理位置。

向DataFrame添加列

如果我们想向DataFrame添加列,我们可以通过使用loc或iloc来遵循与向DataFrame添加索引相同的过程。


16) How to Delete Indices, Rows or Columns From a Pandas Data Frame?

从DataFrame中删除索引

如果您想从DataFrame中删除索引,您需要执行以下操作:

重置DataFrame的索引。

执行del df.index.name以删除索引名称。

通过重置索引删除重复的索引值,并从索引列中删除重复值。

通过行删除索引。

从DataFrame中删除列

您可以使用drop()方法从DataFrame中删除列。

传递给drop()方法的axis参数是0(表示行)或1(表示列)。

您可以传递inplace参数并将其设置为True,以在不重新分配DataFrame的情况下删除列。

您还可以使用drop_duplicates()方法从列中删除重复值。

从DataFrame中移除一行

通过使用df.drop_duplicates(),我们可以从DataFrame中删除重复的行。

您可以使用drop()方法指定我们想要从DataFrame中移除的行的索引。


17) How to Rename the Index or Columns of a Pandas DataFrame?

要重命名Pandas DataFrame的列表或部分,您可以使用rename()策略。要重命名列表,请使用“index”边界提供一个将旧记录值映射到新值的词典。要重命名部分,请使用具有类似词典的“columns”边界。该策略会返回一个带有更改的新DataFrame,对于就地修改,请使用inplace=True边界或将结果重新分配给原始DataFrame。


18) How to iterate over a Pandas DataFrame?

可以通过多种策略迭代Pandas DataFrame,例如使用iterrows()进行逐行迭代,使用iteritems()进行逐列迭代,或者使用itertuples()对列进行命名元组迭代。根据具体任务选择合适的策略至关重要。


19) How to get the items of series A not present in series B?

我们可以使用isin()方法从p1中移除存在于p2中的项。

解决方案

0    2
1    4
2    6
dtype: int64

说明

这段代码使用pandas库创建了两个Series,“p1”和“p2”,然后筛选出“p1”中不存在于“p2”的元素。通过布尔索引得到的最终Series包含来自“p1”中与“p2”不重叠的元素。


20) How to get the items not common to both series A and series B?

我们使用下面的示例获取p1和p2中不共有的所有项。

输出

0     2
1     4
2     6
5    12
6    14
7    16
dtype: int64

说明

这段代码使用pandas和numpy来查找两个pandas Series,“p1”和“p2”之间独特的元素。它首先使用布尔索引筛选出“p1”中独有的元素。然后,它使用numpy计算“p1”和“p2”的并集和交集。最终结果代表了“p1”和“p2”之间独特元素集合的独有并集。


21) How to get the minimum, 25th percentile, median, 75th, and max of a numeric series?

我们可以像下面的示例一样计算p的最小值、25百分位数、中位数、75百分位数和最大值。

输出

array([ 4.61498692, 12.15572753, 14.67780756, 17.58054104, 33.24975515])

说明

这段代码使用pandas和numpy库创建一个pandas Series“p”,其中包含从均值为14、标准差为6的正态分布中抽取的22个随机数。它还设置了一个特定的随机状态以确保可重复性。然后,代码使用numpy函数np.percentile()计算并打印生成的Series“p”的百分位数(0、25、50、75和100)。总而言之,它生成一个随机数据集,设置随机状态,并计算数据集的特定百分位数,从而提供对其分布的见解。


22) How to get frequency counts of unique items of a series?

我们可以像下面的示例一样计算p的每个唯一值的频率计数。

输出

s    4
r    4
q    3
p    3
u    3

说明

这段代码使用pandas和numpy库创建一个pandas Series“p”,其中包含从字符'p'、'q'、'r'、's'、't'和'u'中随机选择的17个元素。然后,代码使用value_counts()函数来计算Series“p”中每个唯一元素的出现次数。总而言之,它提供了一个对生成的随机Series中字符分布的简洁摘要。


23) How to convert a numpy array to a dataframe of given shape?

我们可以像下面的示例一样将Series p重塑为具有6行2列的DataFrame。

输出

0  1  2  3  4
0  3  2  5  5  1
1  3  2  5  5  5
2  1  3  1  2  6
3  1  1  1  2  2
4  3  5  3  3  3
5  2  5  3  6  4
6  3  6  6  6  5

说明

在此代码片段中,pandas和numpy库分别导入为'pd'和'np'。它使用np.random.randint()创建一个pandas Series 'p',其中包含1到6(含)之间的35个随机整数。然后,它使用reshape()函数将'p'的值重塑为7x5的矩阵,从而创建一个DataFrame 'data'。最后,代码打印生成的DataFrame 'data',提供了一个7x5的均匀格式的随机数值的结构化表示。本质上,它将随机数据组织成一个矩阵,以便于理解和分析。


24) How can we convert a Series to DataFrame?

Pandas的Series.to_frame()函数用于将Series对象转换为DataFrame。

name:指代对象。其默认值为None。如果它有一个值,传递的名称将替换Series的名称。

输出

       vals
0          a
1          b
2          c

说明

该代码片段创建了一个名为“vals”的pandas Series,其元素为“a”、“b”和“c”。to_frame()方法用于将此Series转换为DataFrame,从而允许使用带标签的列进行更灵活的数据处理。


25) What is Pandas NumPy array?

Numerical Python (Numpy)被定义为一个Python包,用于执行各种多维和单维数组元素的数值计算和处理。使用Numpy数组的计算比普通Python数组更快。


26) How can we convert DataFrame into a NumPy array?

为了执行一些高级数学函数,我们可以将Pandas DataFrame转换为numpy数组。它使用DataFrame.to_numpy()函数。

DataFrame.to_numpy()函数应用于DataFrame,它返回numpy ndarray。


27) How can we convert DataFrame into an excel file?

我们可以使用to_excel()函数将DataFrame导出到excel文件。

要将单个对象写入excel文件,我们必须指定目标文件名。如果要写入多个工作表,需要使用目标文件名创建一个ExcelWriter对象,并指定要写入的文件中的工作表。


28) How can we sort the DataFrame?

我们可以通过不同类型有效地在DataFrame中执行排序:

  • 按标签
  • 按实际值

按标签

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

按实际值

这是另一种可以在DataFrame中执行排序的类型。与索引排序类似,sort_values()是用于排序值的​​方法。

它还提供了一个功能,我们可以通过传递“by”参数来指定要用其值进行排序的DataFrame列名。


29) What is Time Series in Pandas?

时间序列数据被定义为信息的重要来源,它提供了一种在各种业务中使用的策略。从传统的金融行业到教育行业,它包含了大量关于时间的信息。

时间序列预测是处理时间序列数据以通过时间序列建模预测未来值的机器学习建模。


30) What is Time Offset?

时区偏移(Time offset),通常称为时区偏移,表示特定地点的本地时间与协调世界时(UTC)之间的小时和分钟的差异。它对于表示相对于标准参考点(UTC)的时间变化至关重要,通常定义为UTC加上或减去特定的时数和分钟数。


31) Define Time Periods?

时间段(Time Periods)表示时间跨度,例如天、年、季度或月等。它被定义为一个类,允许我们将频率转换为周期。


32) How to convert String to date?

以下代码演示了如何将字符串转换为日期。

输出

2017-07-14 00:00:00
2017-07-14 00:00:00
2018-07-14 00:00:00

说明

该代码利用datetime模块中的datetime.strptime()方法将日期字符串转换为datetime对象。日期字符串代表了不同格式的日期:“Wednesday, July 14, 2018”、“14/7/17”和“14-07-2017”。然后打印相应的datetime对象(dmy_dt1、dmy_dt2、dmy_dt3),展示了成功的转换。总而言之,代码展示了不同格式的日期字符串到datetime对象的转换,以进行规范化表示和进一步操作。


33) What is Data Aggregation?

数据聚合的主要任务是对一列或多列应用一些聚合。它使用以下方法:

  • sum:用于返回指定轴值的总和。
  • min:用于返回指定轴值的最小值。
  • max:用于返回指定轴的最大值。

34) What is Pandas Index?

Pandas Index被定义为一个重要工具,用于从DataFrame中选择特定的行和列数据。它的任务是组织数据并提供快速的数据访问。它也可以称为子集选择


35) Define Multiple Indexing?

多重索引(Multiple indexing)被定义为重要的索引,因为它涉及数据分析和处理,特别是处理高维数据。它还使我们能够使用较低维度的数据结构(如Series和DataFrame)存储和处理任意维度的数据。


36) Define ReIndexing?

Reindexing用于更改DataFrame的行和列的索引。我们可以使用reindex()方法重新索引单个或多个行。如果新索引的值在DataFrame中不存在,则默认值为NaN。

DataFrame.reindex(labels=None, index=None, columns=None, axis=None, method=None, copy=True, level=None, fill_value=nan, limit=None, tolerance=None)


37) How to Set the index?

我们可以在创建DataFrame时设置索引列。但有时,DataFrame是由两个或多个DataFrame组成的,然后可以使用此方法更改索引。


38) How to Reset the index?

DataFrame的Reset index用于使用“reset_index”命令重置索引。如果DataFrame具有MultiIndex,此方法可以移除一个或多个级别。


39) Describe Data Operations in Pandas?

在Pandas中,有许多用于DataFrame的有用数据操作,如下所示:

  • 行和列选择

我们可以通过传递行和列的名称来选择DataFrame的任何行和列。当您从DataFrame中选择时,它会变成一维的,并被视为Series。

  • 过滤数据

我们可以通过在DataFrame中提供一些布尔表达式来过滤数据。

  • Null 值

当未为项目提供数据时,会出现Null值。各种列可能包含没有值,通常表示为NaN。


40) Define GroupBy in Pandas?

在Pandas中,groupby()函数允许我们通过在真实数据集上使用它们来重新排列数据。它的主要任务是将数据拆分成不同的组。这些组是基于某些标准分类的。对象可以从其任何轴进行分割。

DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, **kwargs)