华为、阿里巴巴、字节跳动 100+ Python 面试问题总结(五)

news2024/11/25 5:34:37

系列文章目录

个人简介:机电专业在读研究生,CSDN内容合伙人,博主个人首页
Python面试专栏:《Python面试》此专栏面向准备面试的2024届毕业生。欢迎阅读,一起进步!🌟🌟🌟
码字不易,如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!😊😊😊


文章目录

  • 系列文章目录
  • Python Pandas 面试问题
    • 60. 什么是 Pandas?
    • 61. 什么是序列和数据框?
    • 62. 如何创建一个 DataFrame?
    • 63. 如何组合不同的 Pandas DataFrame?
    • 64. 如何由字典创建一个 Pandas 序列?
    • 65. 如何识别和处理 DataFrame 中的缺失值?
    • 66. 如何理解 Pandas 的重新索引?
    • 67. 如何在 Pandas DataFrame 中添加新列?
    • 68. 如何从 DataFrame 中删除索引名称、行和列?
    • 69. 如何获得序列 A 中没有的序列 B 中的项?
    • 70. 如何获得序列 A 和序列 B 的非公共项?
    • 71. Pandas 库可以识别导入的日期和时间数据吗?
  • Python 函数库面试问题:[待更新](https://blog.csdn.net/a2360051431)

本文是Python面试专栏的第五篇。在本专栏中,我将总结华为、阿里巴巴、字节跳动等互联网公司 Python 面试中最常见的 100+ 问题。每道题都提供参考答案,希望能够帮助你在求职面试中脱颖而出,找到一份高薪工作。这些面试题涉及 Python 基础知识、Python 编程、数据分析以及 Python 函数库等多个方面。

Python Pandas 面试问题

60. 什么是 Pandas?

Pandas 是一个开源的 Python 数据分析库,它提供了丰富的数据操作和处理功能,包括数据的读取与写入、切片与索引、过滤和排序、缺失值的处理、聚合和统计分析等。同时,Pandas 还集成了 NumPy 库,使得它能够更好地处理大规模的数值计算和数组操作。Pandas 的核心数据结构是 DataFrame,它可以存储和处理具有不同类型的二维标签化数据。

通过 Pandas,我们可以方便地进行数据清洗、转换和分析,对数据进行探索性分析和可视化,并与其他数据科学工具和库协同使用,如 Matplotlib、Scikit-Learn 等。

61. 什么是序列和数据框?

序列(Series)和数据框(DataFrame)是 Pandas 库中两个重要的数据结构。

  • 序列(Series) 是 Pandas 库中的一维标记数组,类似于带有标签的一维数组。它由两部分组成:索引(Index)和值(Value)。索引提供了对数据的标签,可以用于访问和操作数据。值是存储在序列中的实际数据。序列中的数据类型可以是数字、字符串、布尔值等。

  • 数据框(DataFrame) 是 Pandas 库中的二维表格型数据结构,类似于电子表格或 SQL 中的表。它由行索引和列索引组成,每列可以包含不同类型的数据。数据框可以看作是多个序列按照同样的索引组合而成的。数据框常用于处理和分析结构化的数据。

62. 如何创建一个 DataFrame?

要创建一个 DataFrame,可以使用 Pandas 的 DataFrame() 构造函数,并传入相应的数据和参数或者从 CSV,Excel,Json 等文件中读取。

import pandas as pd

data = [['Alice', 25], ['Bob', 30], ['Charlie', 35]]
df1 = pd.DataFrame(data, columns=['Name', 'Age'])		# 从列表创建
data = {'Name': ['Alice', 'Bob', 'Charlie'], 'Age': [25, 30, 35]}
df2 = pd.DataFrame(data)		# 从字典创建
df3 = pd.read_csv('data.csv')	# 从 CSV 文件读取
df4 = pd.read_excel('data.xlsx', sheet_name='Sheet1')		# 从 Excel 文件读取
df5 = pd.read_json('data.json')		# 从 Json 文件读取

63. 如何组合不同的 Pandas DataFrame?

可以使用以下方法组合 DataFrame:

  • _append() 方法:将一个 DataFrame 追加到另一个 DataFrame 的末尾。
  • concat() 方法: 沿着指定的轴(默认沿行)连接多个 DataFrame。
  • join() 方法: 基于索引或列的值进行连接,也可以使用 merge() 实现相同的功能。
  • merge() 方法:基于共同的列或索引值进行连接,并可以指定不同类型的连接。
import pandas as pd

df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'A': [5, 6], 'B': [7, 8]})

combined_df1 = df1._append(df2)		# 创建一个新的 DataFrame,其中包含 df1 和 df2 的行
combined_df2 = pd.concat([df1, df2], axis=0) # axis=0 表示沿着行方向组合
combined_df3 = pd.concat([df1, df2], axis=1) # axis=1 表示沿着列方向组合
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]}, index=['a', 'b'])
df2 = pd.DataFrame({'C': [5, 6], 'D': [7, 8]}, index=['b', 'c'])
combined_df4 = df1.join(df2)		# 通过索引将 df1 和 df2 进行连接
df1 = pd.DataFrame({'ID': [1, 2], 'Name': ['Alice', 'Bob']})
df2 = pd.DataFrame({'ID': [2, 3], 'Age': [25, 30]})
combined_df5 = pd.merge(df1, df2, on='ID')		# 通过 'ID' 列将 df1 和 df2 进行连接

64. 如何由字典创建一个 Pandas 序列?

要从字典创建一个 Pandas 序列,可以使用 pd.Series() 构造函数,并传入字典作为参数,将创建一个包含字典中数据的序列,索引由字典的键自动生成。如下:

import pandas as pd

data = {'a': 1, 'b': 2, 'c': 3}
series = pd.Series(data)

print(series)
'''
输出:
a    1
b    2
c    3
dtype: int64
'''

上述示例中,字典的键 ‘a’、‘b’、‘c’ 成为序列的索引,对应的值 1、2、3 成为序列的数据。其中 dtype: int64 表示数据类型为整数。

除了字典,还可以使用列表、元组等来创建 Pandas 序列。在创建序列时,可以通过指定索引来自定义序列的标签,或使用默认的整数索引。

import pandas as pd

data = [10, 20, 30]
index = ['a', 'b', 'c']

series = pd.Series(data, index=index)

print(series)
'''
输出:
a    10
b    20
c    30
dtype: int64
'''

上述示例中,使用了自定义的索引 ‘a’、‘b’、‘c’ 来创建序列。

65. 如何识别和处理 DataFrame 中的缺失值?

在处理 DataFrame 中的缺失值时,可以采取以下步骤来识别和处理它们:

  1. 识别缺失值:使用 Pandas 库中的 isna()isnull() 函数可以对 DataFrame 进行逐个元素的遍历,并返回一个布尔类型的 DataFrame,其中的 True 表示该位置存在缺失值。

    import pandas as pd
    
    # 创建一个包含缺失值的 DataFrame
    df = pd.DataFrame({'A': [1, 2, None, 4],
    	               'B': [5, None, 7, 8],
        	           'C': [9, 10, 11, None]})
    
    # 判断每个元素是否为缺失值
    is_missing = df.isnull()
    print(is_missing)
    '''
    输出:
           A      B      C
    0  False  False  False
    1  False   True  False
    2   True  False  False
    3  False  False   True
    '''
    
  2. 处理缺失值:根据具体情况,可以选择以下几种方式来处理缺失值:

    • 删除缺失值:使用 dropna() 函数可以删除包含缺失值的行或列。
    # 删除包含缺失值的行
    df_dropna = df.dropna()
    print(df_dropna)
    
    # 删除包含缺失值的列
    df_dropna_columns = df.dropna(axis=1)
    print(df_dropna_columns)
    
    • 填充缺失值:使用 fillna() 函数可以将缺失值替换为指定的数值。
    # 将缺失值替换为 0
    df_fillna = df.fillna(0)
    print(df_fillna)
    
    # 将缺失值替换为每列的平均值
    df_fillna_mean = df.fillna(df.mean())
    print(df_fillna_mean)
    

    另外,fillna() 函数还可以使用其他填充方法,例如前向填充(ffill)或后向填充(bfill)。

66. 如何理解 Pandas 的重新索引?

在 Pandas 中,重新索引是指对数据结构(如 Series 或 DataFrame)的行索引或列索引进行修改、重新排序或扩充的操作。通过重新索引,可以改变数据的顺序、增加或删除索引标签,使得数据结构与新的索引对齐。

Pandas 提供了 reindex() 方法来执行重新索引操作。有以下常见的用法:

  • 更改现有索引的顺序:传入一个新的索引顺序,将数据按照新的索引顺序重新排序。
  • 增加缺失值或填充值:根据新的索引增加缺失值,或者使用指定的填充值填充缺失位置。
  • 修改行索引或列索引:修改行索引或列索引。

示例代码如下:

import pandas as pd

# 创建一个示例 Series
s = pd.Series([1, 2, 3], index=['a', 'b', 'c'])
# 重新索引,按照新的索引顺序排序
s_reindexed = s.reindex(['c', 'b', 'a'])
print(s_reindexed)
# 重新索引,增加缺失值
s_reindexed = s.reindex(['a', 'b', 'c', 'd'])
print(s_reindexed)
# 重新索引,填充缺失位置为 0
s_filled = s.reindex(['a', 'b', 'c', 'd'], fill_value=0)
print(s_filled)
# 创建一个示例 DataFrame
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}, index=['a', 'b', 'c'])
# 修改行索引
df_reindexed_rows = df.reindex(['c', 'b', 'a'])
print(df_reindexed_rows)
# 修改列索引
df_reindexed_columns = df.reindex(columns=['B', 'A'])
print(df_reindexed_columns)

67. 如何在 Pandas DataFrame 中添加新列?

可以使用 + 运算符、直接赋值或者 insert() 将新列添加到 Pandas 数据帧,如下所示:

import pandas as pd
      
# 创建一个示例 DataFrame
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}) 
# 创建新的 Series
df['third']= = pd.Series([7, 8, 9])
#To add new column third
df += new_column    
print (df)    
# 创建新的 Series
new_column = pd.Series([10, 11, 12])
# 分配新列到 DataFrame
df['D'] = new_column
print(df)
# 定义新列的名称和数据
new_column_name = 'E'
new_column_data = [13, 14, 15]
# 在指定位置插入新列
df.insert(loc=1, column=new_column_name, value=new_column_data)
print(df)  

68. 如何从 DataFrame 中删除索引名称、行和列?

  • 要删除索引名称:可以执行 del df.index._name 或者将索引幅值为 None 以按名称删除索引。
    import pandas as pd
    
    # 创建一个示例 DataFrame
    df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
    # 设置索引名称为 'Index_Name'
    df.index.name = 'Index_Name'
    print(df)
    
    # 删除索引名称
    del df.index._name      # 等效于 df.index._name = None
    print(df)
    '''
    输出:
    	        A  B
    Index_Name      
    0           1  4
    1           2  5
    2           3  6
       A  B
    0  1  4
    1  2  5
    2  3  6
    '''
    

    注意:如果在 del df.index._name 之前没有设置索引的名称,那么将提示 AttributeError 错误,因为它只会删除已经存在的索引名称。

  • 从 DataFrame 删除行/列:drop() 方法用于从 DataFrame 中删除行/列。axis=0 表示删除指定行或多行,axis=1 表示删除指定列或多列。
    import pandas as pd
    
    # 创建一个示例 DataFrame
    df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
    # 删除指定行
    df_without_rows = df.drop([0, 2])
    print(df_without_rows)
    
    # 创建一个示例 DataFrame
    df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
    # 删除指定列
    df_without_columns = df.drop(['A'], axis=1)
    print(df_without_columns)
    
    在这里插入图片描述

69. 如何获得序列 A 中没有的序列 B 中的项?

要获取 Series A 中没有的 Series B 中的项,可以使用 Pandas 的 isin() 方法和布尔索引。

以下是一种常见的方法:

import pandas as pd

# 创建示例 Series
series_a = pd.Series([1, 2, 3, 4])
series_b = pd.Series([3, 4, 5, 6])

# 使用 isin() 方法检查 Series B 中的项是否在 Series A 中
is_in_series_a = series_b.isin(series_a)

# 使用布尔索引获取 Series B 中不在 Series A 中的项
result = series_b[~is_in_series_a]
print(result)

输出结果如下所示,即为 Series A 中没有的 Series B 中的项:

2    5
3    6
dtype: int64

注意:以上代码假设 Series A 和 Series B 的数据类型相同(都为整数)。如果 Series A 和 Series B 的数据类型不同,需要先将它们转为相同的数据类型。

70. 如何获得序列 A 和序列 B 的非公共项?

要获取序列 A 和序列 B 的非公共项,可以使用 Pandas 的 isin() 方法和布尔索引的结合。

以下是一种常见的方法:

import pandas as pd

# 创建示例 Series
series_a = pd.Series([1, 2, 3, 4])
series_b = pd.Series([3, 4, 5, 6])

# 使用 isin() 方法检查 Series A 和 Series B 中的元素是否相互存在
is_in_series_a = series_b.isin(series_a)
is_in_series_b = series_a.isin(series_b)

# 使用布尔索引获取各自序列中不在另一个序列中的项
result = series_a[~is_in_series_b]._append(series_b[~is_in_series_a])
print(result)

输出结果如下所示,即为序列 A 和序列 B 的非公共项:

0    1
1    2
2    5
3    6
dtype: int64

71. Pandas 库可以识别导入的日期和时间数据吗?

是的,Pandas 库可以识别和处理日期和时间数据。当从不同来源导入数据时,Pandas 提供了多种方法来解析和识别日期和时间。

  1. 使用 pd.to_datetime() 函数:可以使用 pd.to_datetime() 函数将字符串转换为 Pandas 的日期时间对象。它可以自动解析多种日期和时间格式,并将其转换为标准的日期时间格式。

    import pandas as pd
    
    # 示例数据
    data = ['2022-01-01 12:00:00', '2022-01-02 13:30:45', '2022-01-03 15:15:00']
    
    # 转换为日期时间对象
    datetime_data = pd.to_datetime(data)
    print(datetime_data)
    

    输出结果如下所示:

    DatetimeIndex(['2022-01-01 12:00:00', '2022-01-02 13:30:45', '2022-01-03 15:15:00'], dtype='datetime64[ns]', freq=None)
    

    在这个例子中,pd.to_datetime() 函数将日期时间字符串列表转换为 Pandas 的 DatetimeIndex 对象,这是一个包含日期和时间的索引

  2. dateutil.parser.parse():在某些情况下,日期和时间可能具有非标准的格式,无法被自动解析。可以使 dateutil.parser.parse() 函数来解析这些字符串。它是 dateutil 库中的一个功能强大的日期时间解析器。

    from dateutil.parser import parse
    import pandas as pd
    
    # 示例数据
    data = ['01/01/2022 12pm', '01/02/2022 01:30pm', '01/03/2022 03:45pm']
    
    # 解析日期时间字符串
    datetime_data = [parse(dt) for dt in data]
    
    # 转换为 pandas 的日期时间对象
    datetime_data = pd.to_datetime(datetime_data)
    
    print(datetime_data)
    

    输出结果如下所示:

    DatetimeIndex(['2022-01-01 12:00:00', '2022-01-02 13:30:00', '2022-01-03 15:45:00'], dtype='datetime64[ns]', freq=None)
    

Python 函数库面试问题:待更新

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/781057.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

苹果手机IOS自带科学计算器冷门功能使用

前言 事件是这样的,前几天有人想买个斜坡枕,斜坡枕是个直角三角形,已知短直角边长度是14CM,长直角边长度是80CM,他想知道这个斜坡是多少度,我说这个不是很简单吗?计算一下 a r c t a n ( 14 80…

C# List 详解七

目录 42.Sort() 43.ToArray() 44.ToString() 45.TrimExcess() 46.TrueForAll(Predicate) C# List 详解一 1.Add(T),2.AddRange(IEnumerable),3.AsReadOnly(),4.BinarySearch(T), C# List 详解二 5.Cl…

Matlab 刚性问题求解器-ode23s

1、ode23s介绍 ode23s(stiff differential equation solver)是MATLAB中的一种求解刚性(stiff)微分方程的数值方法。刚性微分方程通常具有多个时间尺度差异较大的变量,并且其中至少有一个变量具有快速变化的特性。 od…

Antv G6 force分布式布局 icon“+“ “-“收缩自定义,关系图子节点

子节点收缩 const collapseIcon (x, y, r) > {// 折叠return [[M, x - r, y],[a, r, r, 0, 1, 0, r * 2, 0],[a, r, r, 0, 1, 0, -r * 2, 0],[M, x - r 4, y],[L, x - r 2 * r - 4, y]]}const expandIcon (x, y, r) > {// 拓展return [[M, x - r, y],[a, r, r, 0, 1,…

SQL优化——插入数据优化(load指令的使用)

插入数据时的优化主键优化order by优化group by优化limit优化count优化update优化 1.插入数据时的优化 批量插入数据时最好最多别超过一千条,如果一次批量插入几万条数据,可以将其分割成多条insert语句进行插入。 mysql的事务提交方式是默认自动提交的…

Linux 下centos 查看 -std 是否支持 C17

实际工作中,可能会遇到c的一些高级特性,例如std::invoke,此函数是c17才引入的,如何判断当前的gcc是否支持c17呢,这里提供两种办法。 1.根据gcc的版本号来推断 gcc --version,可以查看版本号,笔者…

15.矩阵运算与img2col方式的卷积

使用矩阵计算卷积 GEMM算法 矩阵乘法运算(General Matrix Multiplication),形如: C A B , A ∈ R m k , B ∈ R k n , C ∈ R m n C AB, A\in \mathbb{R}^{m\times k},B\in \mathbb{R}^{k\times n},C\in \mathbb{R}^{m\times n} CAB,A∈Rmk,B∈Rk…

vite4.x+vue3.x中使用装饰器语法,eslint校验不识别@的报错处理方法

在项目中,使用了pre-commit校验代码,eslint校验无法识别,导致一直无法提交代码,查找了资料,eslint版本过低,不能解决现在遇到的问题 最终正确的配置方法: 装饰器配置文件babel.config.js module.exports …

了解应用层

应用层 1. 概述2. 应用程序组织方式2.1 C/S方式2.1 P2P方式 3. 动态主机配置协议DHCP3.1 DHCP工作流程 4. 域名系统DNS4.1 域名结构4.2 域名分类4.3 域名服务器4.3.1 分类 4.4 DNS域名解析过程 5. 文件传输协议FTP5.1 FTP工作流程 6. 电子邮件系统6.1 邮件信息格式6.2 简单邮件…

EtherCAT转TCP/IP网关EtherCAT解决方案

你是否曾经为生产管理系统的数据互联互通问题烦恼过?曾经因为协议不同导致通讯问题而感到困惑?现在,我们迎来了突破性的进展! 介绍捷米特JM-TCPIP-ECT,一款自主研发的Ethercat从站功能的通讯网关。它能够连接到Etherc…

12.面板问题

面板问题 html部分 <h1>Lorem ipsum dolor sit, amet consectetur adipisicing.</h1><div class"container"><div class"faq"><div class"title-box"><h3 class"title">Lorem, ipsum dolor.<…

TypeScript 中的常用类型声明大全

文章目录 基本数据类型1.number类型2.String 类型3. Boolean 类型4. undefined 类型5.Null类型6.Symbol类型7.BigInt类型 引用数据类型8.Array 类型9.Object 类型 TS 新增特性数据类型4.联合类型5.字面量类型6.Any 类型7.unknown 类型8.Void 类型9.never 类型10.对象类型12 tup…

基于linux下的高并发服务器开发(第三章)- 3.11 读写锁

读写锁的类型 pthread_rwlock_t int pthread_rwlock_init(pthread_rwlock_t *restrict rwlock, const pthread_rwlockattr_t *restrict attr); int pthread_rwlock_destroy(pthread_rwlock_t *rwlock); int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock); int pthread_rwlo…

macOS 下使用 brew 命令安装 Node.js

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的编码爱好者 大家好&#xff0c;我是 DevO…

iOS内存管理--内存的分区

内存分配区域 iOS程序内存分为5个区域 栈区&#xff0c;堆区&#xff0c;BSS&#xff0c;全局变量&#xff0c;代码区 五个区域有两种分配时间 运行时分配&#xff1a;栈区&#xff0c;堆区 栈区&#xff1a;局部变量&#xff0c;函数参数&#xff08;形式参数&#xff09;&…

Hadoop概念学习(无spring集成)

Hadoop 分布式的文件存储系统 三个核心组件 但是现在已经发展到很多组件的s 或者这个图 官网地址: https://hadoop.apache.org 历史 hadoop历史可以看这个: https://zhuanlan.zhihu.com/p/54994736 优点 高可靠性&#xff1a; Hadoop 底层维护多个数据副本&#xff0c;所…

[C初阶]循环和分支语句

目录 if...else语句 ​编辑 易犯错误 打印100以内的奇数 switch...case语句 输出星期 循环语句 对比判断 1.break终止循环 2.continue 读取字符 缓冲区读取 只输出数字字符 for循环 do...while循环 n的阶乘求和 循环实现动态打印 猜数字游戏【总结】 goto ​…

C++的各种用法展示

&#xff43;&#xff0b;&#xff0b;与数学典型算法的结合 阿姆斯特朗数 // A number is called as Armstrong number if sum of cubes of digits of number is // equal to the number itself. // For Example 153 is an Armstrong number because 153 153. #include <…

K8S初级入门系列之十二-计算资源管理

一、前言 K8S集群中着这各类资源&#xff0c;比如计算资源&#xff0c;API资源等&#xff0c;其中最重要的是计算资源&#xff0c;包括CPU&#xff0c;缓存&#xff0c;存储等。管理这些资源就是要在资源创建时进行约束和限制&#xff0c;在运行时监控这些资源的指标&#xff0…

[23] HeadSculpt: Crafting 3D Head Avatars with Text

paper | project 本文主要想解决&#xff1a;1&#xff09;生成图像的不连续问题&#xff1b;2&#xff09;3D修改中的保ID问题。针对第一个问题&#xff0c;本文引入了Landmark-based ControlNet特征图和<back-view>的text embedding&#xff1b;针对第二个问题&#x…