基本信息
文件名称:Python数据分析面试题及答案.docx
文件大小:23.5 KB
总页数:4 页
更新时间:2025-09-25
总字数:约2.87千字
文档摘要

Python数据分析面试题及答案

一、基础操作题(Pandas/NumPy)

问题:用Pandas读取CSV文件时,如何跳过前3行标题、指定“日期”列为时间格式,且只读取“用户ID”“消费金额”“日期”三列?

答案:

importpandasaspd

df=pd.read_csv(

data.csv,

skiprows=3,#跳过前3行

usecols=[用户ID,消费金额,日期],#指定列

parse_dates=[日期]#解析为datetime格式

)

注意:若日期格式不标准(如“2023.10.01”),需加date_parser=lambdax:pd.to_datetime(x,format=%Y.%m.%d)。

问题:NumPy中如何创建一个形状为(3,4)、元素值在[0,10)之间的随机整数数组?并计算每行的最大值。

答案:

importnumpyasnp

#创建随机数组

arr=np.random.randint(0,10,size=(3,4))

#计算每行最大值

row_max=np.max(arr,axis=1)#axis=1表示按行计算

扩展:若要保留最大值的索引,用np.argmax(arr,axis=1)。

二、数据清洗题

问题:DataFrame中“年龄”列存在缺失值和异常值(如负数、超过150),如何处理?

答案:分两步处理:

#1.替换异常值为NaN(负数或150视为异常)

df[年龄]=df[年龄].mask((df[年龄]0)|(df[年龄]150))

#2.填充缺失值(数值型用中位数更抗outliers,避免均值被异常值影响)

df[年龄]=df[年龄].fillna(df[年龄].median())

注意:若“年龄”是分类场景(如“未成年/成年”),可先分组再填充(df.groupby(性别)[年龄].transform(lambdax:x.fillna(x.median())))。

处理异常值:先过滤不合理数据,再填充缺失值

问题:如何用Pandas去除DataFrame中“用户ID”列的重复值,且保留第一次出现的记录?

答案:

#keep=first保留首次出现,inplace=True直接修改原数据

df.drop_duplicates(subset=[用户ID],keep=first,inplace=True)

扩展:若需查看重复行,用df[df.duplicated(subset=[用户ID],keep=False)]。

三、数据分析题

问题:现有销售数据(含“区域”“产品类别”“销售额”“日期”),如何计算每个区域每月各产品类别的平均销售额?

答案:先新增“月份”列,再分组聚合:

#1.提取月份(格式:2023-10)

df[月份]=df[日期].dt.to_period(M)

#2.分组计算平均销售额

monthly_avg=df.groupby([区域,月份,产品类别])[销售额].agg(mean).reset_index()

关键:reset_index()将分组索引转为列,避免后续操作因多级索引报错。

问题:用Matplotlib/Seaborn绘制“各产品类别销售额分布箱线图”,要求区分不同类别颜色,添加标题和坐标轴标签。

答案:

importseabornassns

importmatplotlib.pyplotasplt

plt.figure(figsize=(10,6))#设置图大小

#绘制箱线图,hue区分类别,palette指定颜色

sns.boxplot(x=产品类别,y=销售额,data=df,hue=产品类别,palette=Set2,legend=False)

#添加标签和标题

plt.xlabel(产品类别,fontsize=12)

plt.ylabel(销售额(元),fontsize=12)

plt.title(各产品类别销售额分布,fontsize=14,pad=20)

plt.xticks(rotation=45)#旋转x轴标签防重叠

plt.show()

四、实战场景题

问题:用户行为数据中,“用户ID”“访问时间”“操作类型”(点击/下单/退款),如何计算“用户首次访问后7天内的复购率”(复购定义:首次访问后7天内至少有2次下单)?

答案:步骤如下:

#1.筛选下单数据,按用户分组找首次下单时间

order_df=df[