一、 Pandas 面试题
Pandas 是一个用于数据操作和分析的 Python 库。在数据处理和数据分析领域中,它是非常流行的工具之一,被广泛用于处理结构化数据。
在 Pandas 面试中,经常涉及以下几个方面的问题:
1. Series 和 Dataframe 有什么区别?
Pandas 中的 Series 可以看作是一个带有标签的一维数组,可以保存不同的数据类型,每个元素都有一个唯一的标签。而 Dataframe 是二维数组,可以看成是多个 Series 拼接组成的表格,有行索引和列索引,可以亚索每一行和每一列。
# 简单创建 Series 和 Dataframe
import pandas as pd
# 创建 Series
s = pd.Series([1,2,3,4])
print(s)
# 创建 Dataframe
df = pd.DataFrame({'a': [1,2,3,4], 'b': [5,6,7,8]})
print(df)
2. 如何删除 Dataframe 中重复的行?
如果 Pandas 中的 Dataframe 包含重复的行,可以使用 drop_duplicates 方法删除,方法会返回一个新的 Dataframe。在调用时,可以指定列名,只有指定的列全都相同的行才会被删除。
# 删除 Dataframe 中的重复行
import pandas as pd
df = pd.DataFrame({'A': [1,1,2,2,3,4], 'B': ['a', 'b', 'a', 'a', 'c', 'd']})
df = df.drop_duplicates(['A'])
print(df)
3. 如何对 Dataframe 进行合并操作?
在 Pandas 中,可以使用 concat 方法或 merge 方法对 Dataframe 进行合并操作。其中,concat 方法主要用于简单的合并操作。如果需要更加复杂的合并操作,则可以选择 merge 方法。
# 使用 concat 合并 Dataframe
import pandas as pd
df1 = pd.DataFrame({'A': [1,2,3], 'B': [4,5,6]})
df2 = pd.DataFrame({'A': [4,5,6], 'B': [7,8,9]})
df3 = pd.concat([df1, df2])
print(df3)
# 使用 merge 合并 Dataframe
df4 = pd.DataFrame({'A': [1,2,3], 'B': [4,5,6], 'key': ['a', 'b', 'c']})
df5 = pd.DataFrame({'B': [7,8,9], 'C': [10,11,12], 'key': ['a', 'b', 'd']})
df6 = pd.merge(df4, df5, on='key')
print(df6)
二、 Pandas常见面试题
1. 如何删除一列或多列?
可以使用 drop 函数删除一列,需要指定列的名称以及 axis=1 参数。如果需要删除多列,则可以将列名放在一个 list 中传递给 drop 函数。
# 删除一列或多列
import pandas as pd
df = pd.DataFrame({'A': [1,2,3], 'B': [4,5,6], 'C': [7,8,9]})
df = df.drop(['B', 'C'], axis=1)
print(df)
2. 如何选择 Dataframe 中的某些列?
可以使用 loc 或 iloc 函数选择某些列。如果只需要选择一列,则可以使用如下代码:
# 选择 Dataframe 中的某些列
import pandas as pd
df = pd.DataFrame({'A': [1,2,3], 'B': [4,5,6], 'C': [7,8,9]})
col = df['A']
print(col)
如果需要选择多列,则可以使用 loc 或 iloc 函数。其中,loc 函数是基于名称进行选择,iloc 函数是基于索引进行选择。
# 使用 loc 函数选择多列
cols = df.loc[:, ['A', 'C']]
print(cols)
# 使用 iloc 函数选择多列
cols = df.iloc[:, [0, 2]]
print(cols)
3. 如何设置 Dataframe 中某些列的数值类型?
可以使用 astype 函数设置某些列的数值类型,函数会返回新的 Dataframe。可以将每个需要转换类型的列都单独转换,也可以使用一个字典将需要转换类型的列名称和对应的数值类型一起传递给 astype 函数。
# 设置 Dataframe 中某些列的数值类型
import pandas as pd
df = pd.DataFrame({'A': ['1', '2', '3'], 'B': ['4.1', '5.2', '6.3']})
df['A'] = df['A'].astype(int)
df['B'] = df['B'].astype(float)
print(df)
# 传递字典转换某些列的数值类型
dtypes = {'A': int, 'B': float}
df = df.astype(dtypes)
print(df)
三、 Pandas多层标题选取
1. 如何选取多层标题中的某个子标题?
可以使用 loc 函数选取多层标题中的某个子标题,需要指定每个层级的名称,可以使用 tuple 或列表进行指定,例如:
# 选择多层标题中的子标题
import pandas as pd
data = {('a', 'b'): [1,2,3], ('a', 'c'): [4,5,6]}
df = pd.DataFrame(data)
sub_df = df.loc[:, ('a', 'b')]
print(sub_df)
2. 如何选取多层标题中的所有子标题?
可以使用 xs 函数选取多层标题中的所有子标题,需要指定每个层级的名称。如果有多个层级,可以使用 level 参数指定。
# 选择多层标题中的所有子标题
import pandas as pd
data = {('a', 'b'): [1,2,3], ('a', 'c'): [4,5,6]}
df = pd.DataFrame(data)
sub_df = df.xs('b', level=1, axis=1)
print(sub_df)
3. 如何选取包含某个标题的所有子标题?
可以使用 filter 函数选取包含某个标题的所有子标题,需要指定要筛选的标题的名称。例如:
# 选择包含某个标题的所有子标题
import pandas as pd
data = {('a', 'b'): [1,2,3], ('a', 'c'): [4,5,6], ('b', 'd'): [7,8,9]}
df = pd.DataFrame(data)
sub_df = df.filter(like='a', axis=1)
print(sub_df)
四、 总结
在面试中,Pandas 常常是重要的考点。本篇文章介绍了Pandas的常见面试题,包括 Series 和 Dataframe 的区别、删除重复行、合并 Dataframe、删除列、选择列、数据类型的设置、多层标题选取等。希望对大家在 Pandas 面试中有所帮助。