Python-pandas面试题总结
一、数据结构基础
-
Series 与 DataFrame 的区别
- Series 是一维标签数组,只能存储单一类型数据;DataFrame 是二维表格型数据结构,不同列可以存储不同数据类型。
- Series 由
值(values)和索引(index)组成; DataFrame由多个列(Series)组成,每列有独立列名。 - 示例:
import pandas as pd
# 创建 Series
s = pd.Series([1, 3, 5], index=['a', 'b', 'c'])
# 创建 DataFrame
df = pd.DataFrame({'A': [1, 2], 'B': ['x', 'y']})
-
如何从字典/列表创建 DataFrame
- 使用
pd.DataFrame()并传入字典或嵌套列表,键作为列名。
- 使用
从字典创建 DataFrame
1)基础字典格式
字典的键作为列名,值作为对应列的数据列表。
import pandas as pd
data = {'Name': ['Alice', 'Bob', 'Charlie'], 'Age': [25, 30, 35]}
df = pd.DataFrame(data)
输出:
Name Age
0 Alice 25
1 Bob 30
2 Charlie 35
说明:列名自动对齐,数据按行填充。
2)处理嵌套字典
若字典值为字典,则键会作为列的多级索引(适用于复杂结构):
data = {'Info': {'Name': ['Alice', 'Bob'], 'Age': [25, 30]}}
df = pd.DataFrame(data['Info'])
输出:
Name Age
0 Alice 25
1 Bob 30
从列表创建 DataFrame
1)列表的列表(嵌套列表)
每个子列表表示一行数据,需配合 columns 参数指定列名:
data = [['Alice', 25], ['Bob', 30], ['Charlie', 35]]
df = pd.DataFrame(data, columns=['Name', 'Age'])
输出:
Name Age
0 Alice 25
1 Bob 30
2 Charlie 35
2)字典列表
列表中的每个字典代表一行数据,键自动对齐为列名:
data = [{'Name': 'Alice', 'Age': 25}, {'Name': 'Bob', 'Age': 30}]
df = pd.DataFrame(data)
输出:
Name Age
0 Alice 25
1 Bob 30
3)配合 NumPy 数组
若数据为 NumPy 数组,可直接转换并指定列名:
import numpy as np
arr = np.array([['Alice', 25], ['Bob', 30]])
df = pd.DataFrame(arr, columns=['Name', 'Age'])
二、数据读取与查看
- 读取 CSV 文件
- 使用
pd.read_csv('file.csv'),可选参数如parse_dates处理日期格式。
示例 CSV 文件内容 (data.csv):
date,value
2023-01-05,100
2023-02-10,200
读取并解析日期列:
df = pd.read_csv('data.csv', parse_dates=['date'])
print(df.dtypes)
输出:
date datetime64[ns]
value int64
- 使用
- 查看数据基本信息
df.head(n)查看前 n 行,df.info()显示数据类型,df.describe()统计数值列摘要。
三、数据处理与清洗
- 处理缺失值
df.dropna()删除缺失值行/列,df.fillna(value)填充指定值或统计量(如均值)。
- 删除重复值
df.drop_duplicates()删除重复行。
- 类型转换
df.astype()修改列数据类型,例如将字符串转为数值。
四、数据筛选与聚合
- 条件筛选
- 布尔索引:
df[df['A'] > 10]筛选列 A 大于 10 的行。
- 布尔索引:
- 分组聚合
df.groupby('category').sum()按类别分组求和,或自定义聚合函数。
- 数据透视表
pd.pivot_table()实现类似 Excel 的透视表功能,支持多维度聚合。
五、数据合并与连接
- 合并 DataFrame
pd.concat([df1, df2], axis=0)纵向堆叠,pd.merge(df1, df2, on='key')按列关联。
- 连接方式差异
- 内连接(
how='inner')保留共有键, - 外连接(
how='outer')保留所有键。
- 内连接(
六、时间序列处理
- 解析日期数据
- 通过
pd.to_datetime(df['date'])转换日期字符串为时间戳。
- 通过
- 时间窗口计算
- 使用
df.resample('D').mean()按天重采样并计算均值。
- 使用
七、性能优化
- 内存优化
- 调整数据类型(如
int32替代int64)减少内存占用。
- 调整数据类型(如
- 向量化操作
- 优先使用内置函数(如
df.apply())替代循环,提升效率。
- 优先使用内置函数(如
高频进阶问题示例
- 如何将多个 Series 合并为 DataFrame:
pd.concat([s1, s2], axis=1)。 - 如何设置或重置索引:
df.set_index('col')和df.reset_index()。
本文来自博客园,作者:业余砖家,转载请注明原文链接:https://www.cnblogs.com/yeyuzhuanjia/p/18831733

浙公网安备 33010602011771号