Python数据处理实战:列表推导式+time库+DataFrame+groupby详细代码注释

张开发
2026/4/6 1:49:44 15 分钟阅读

分享文章

Python数据处理实战:列表推导式+time库+DataFrame+groupby详细代码注释
船长Talk | 每天一篇数据分析干货关注公众号「船长Talk」获取更多 Python / 数据分析 / SQL 实战技巧附完整注释代码。每篇文章都有详细代码注释学了就能用。Python 数据处理实战列表推导式 time库 DataFrame groupby 详细代码注释本文整理了 Python 数据分析常考/常用的 10 个操作包含详细代码注释适合入门和查阅复习。 涵盖列表去重、列表推导式、maplambda、time 时间转换、pandas DataFrame 创建与 groupby 分组聚合。一、列表操作题目要求# 公众号船长Talk # 以下是 10 道 Python 基础练习题含答案代码 # 1. 实现列表去重 L1 [1, 1, 2, 3, 4, 2, 4] # 2. 列表推导式实现 L1 每个元素加1 # 3. 列表推导式实现获取 L1 中大于2的元素 # 4. map 加 lambda 实现每个元素加1 # 5. 把字符串 19-10-08 转化为时间 # 6. 1582713904 转化为时间 # 7. 2018-2-26 转化为时间戳 # 8. 创建 DataFrame 并以 E 列分组对 D 列求最大值、合计、最小值 # 9. 访问 test 组的最大值、最小值、合计 # 10. 访问所有 E 组合计二、完整代码含详细注释# 题1列表去重 # 公众号船长Talk L1 [1, 1, 2, 3, 4, 2, 4] # 原始列表含重复元素 L2 [] # 用于存放去重后结果 for i in L1: if i not in L2: # 若元素不在 L2 中则加入 L2.append(i) print(L2) # 输出[1, 2, 3, 4] # 更简洁写法推荐 L2_v2 list(set(L1)) # set 自动去重再转回 list print(sorted(L2_v2)) # 排序后输出[1, 2, 3, 4]# 题2列表推导式 - 每个元素加1 # 公众号船长Talk list3 [x 1 for x in L1] # 列表推导式遍历 L1每个元素 1 print(list3) # 输出[2, 2, 3, 4, 5, 3, 5] # 扩展二维列表展平列表推导式进阶 vec [[1,2,3],[4,5,6],[7,8,9]] flat [num for elem in vec for num in elem] # 双层推导式 print(flat) # 输出[1, 2, 3, 4, 5, 6, 7, 8, 9]# 题3列表推导式 - 筛选大于2的元素 # 公众号船长Talk list4 [x for x in L1 if x 2] # 带条件的列表推导式 print(list4) # 输出[3, 4, 4]L1中大于2的元素# 题4map lambda 每个元素加1 # 公众号船长Talk # lambda x: x1 匿名函数等价于 def f(x): return x1 # map(函数, 可迭代对象) 对每个元素应用函数返回迭代器 map_list map(lambda x: x 1, L1) print(list(map_list)) # 需用 list() 转换才能打印[2, 2, 3, 4, 5, 3, 5]# 题5 6时间字符串 / 时间戳 转换 # 公众号船长Talk import time # --- 题5字符串 19-10-08 转化为时间元组格式--- time_1 19-10-08 # strptimestring parse time按格式解析字符串为 struct_time 元组 # %y 两位年份19 → 2019%m 月%d 日 time2 time.strptime(time_1, %y-%m-%d) print(time2) # time.struct_time(tm_year2019, tm_mon10, tm_mday8, ...) # strftime格式化输出%Y 四位年份 print(time.strftime(%Y-%m-%d, time2)) # 输出2019-10-08 # --- 题6时间戳 1582713904 转化为可读时间 --- time4 time.localtime(1582713904) # 时间戳 → struct_time本地时间 print(time.strftime(%Y-%m-%d, time4)) # 输出2020-02-26# 题72018-2-26 转化为时间戳 # 公众号船长Talk # strptime字符串 → struct_time c_time time.strptime(2018-2-26, %Y-%m-%d) # mktimestruct_time → Unix 时间戳浮点秒数 timestamp time.mktime(c_time) print(timestamp) # 输出1519574400.0北京时间对应的时间戳# 题8创建 DataFrame groupby 分组聚合 # 公众号船长Talk import pandas as pd import numpy as np # 创建 DataFrame多种列类型演示 df2 pd.DataFrame({ id: np.arange(1, 5), # 整数序列 [1,2,3,4] A: 1., # 浮点常量广播填充 B: pd.Timestamp(20130102), # 时间戳列广播填充 C: pd.Series(1, indexlist(range(4)), dtypefloat32), # float32 类型 D: np.array([3] * 4, dtypeint32), # int32 类型全为 3 E: [test, train, test, train], # 字符串标签列 F: foo # 字符串常量广播填充 }) print(df2) # 按 E 列分组对 D 列求最大值、合计、最小值 # groupby(E)按 E 列的值分组test/train 两组 # [D]只对 D 列操作 # .agg([sum, max, min])聚合函数列表 df8 df2.groupby(E)[D].agg([sum, max, min]) print(df8) # 输出 # sum max min # E # test 6 3 3 # train 6 3 3# 题9访问 test 组的统计值 # 公众号船长Talk print(df8) # .loc[test]按行标签访问E 列的值作为索引 result df8.loc[test] print(result) # 输出 # sum 6 # max 3 # min 3 # Name: test, dtype: int64# 题10访问所有 E 组的合计 # 公众号船长Talk print(df8) # 直接用列名 sum 访问该列所有组的合计值 print(df8[sum]) # 输出 # E # test 6 # train 6 # Name: sum, dtype: int64三、知识点总结知识点语法用途列表推导式[expr for x in list if cond]简洁生成新列表map lambdalist(map(lambda x: ..., lst))函数式批量处理strptimetime.strptime(str, fmt)字符串 → 时间元组strftimetime.strftime(fmt, struct)时间元组 → 格式字符串mktimetime.mktime(struct)时间元组 → 时间戳localtimetime.localtime(timestamp)时间戳 → 时间元组groupby aggdf.groupby(col)[col2].agg([...])分组聚合统计 更多干货关注公众号「船长Talk」每天推送 Python / SQL / 数据分析 实战内容每篇都有详细代码注释看完能直接用。微信搜索「船长Talk」即可关注。

更多文章