Python-pandas面试题总结

一、数据结构基础

  1. ‌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']})

  2. ‌如何从字典/列表创建 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'])

 

二、数据读取与查看

  1. ‌读取 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


  2. ‌查看数据基本信息‌
    • df.head(n) 查看前 n 行,
    • df.info() 显示数据类型,
    • df.describe() 统计数值列摘要‌

 

三、数据处理与清洗

  1. ‌处理缺失值‌
    • df.dropna() 删除缺失值行/列,
    • df.fillna(value) 填充指定值或统计量(如均值)‌
  2. ‌删除重复值‌
    • df.drop_duplicates() 删除重复行‌
  3. ‌类型转换‌
    • df.astype() 修改列数据类型,例如将字符串转为数值‌

 

四、数据筛选与聚合

  1. ‌条件筛选‌
    • 布尔索引:df[df['A'] > 10] 筛选列 A 大于 10 的行‌
  2. ‌分组聚合‌
    • df.groupby('category').sum() 按类别分组求和,或自定义聚合函数‌
  3. ‌数据透视表‌
    • pd.pivot_table() 实现类似 Excel 的透视表功能,支持多维度聚合‌

 

五、数据合并与连接

  1. ‌合并 DataFrame‌
    • pd.concat([df1, df2], axis=0) 纵向堆叠,
    • pd.merge(df1, df2, on='key') 按列关联‌
  2. ‌连接方式差异‌
    • 内连接(how='inner')保留共有键,
    • 外连接(how='outer')保留所有键‌

 

六、时间序列处理

  1. ‌解析日期数据‌
    • 通过 pd.to_datetime(df['date']) 转换日期字符串为时间戳‌
  2. ‌时间窗口计算‌
    • 使用 df.resample('D').mean() 按天重采样并计算均值‌

 

七、性能优化

  1. ‌内存优化‌
    • 调整数据类型(如 int32 替代 int64)减少内存占用‌
  2. ‌向量化操作‌
    • 优先使用内置函数(如 df.apply())替代循环,提升效率‌

 

高频进阶问题示例

  • ‌如何将多个 Series 合并为 DataFrame‌:pd.concat([s1, s2], axis=1)
  • ‌如何设置或重置索引‌:df.set_index('col') 和 df.reset_index()

 

posted @ 2025-04-17 21:51  业余砖家  阅读(428)  评论(0)    收藏  举报