ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Pandas在电商数据处理中的核心应用与实战技巧

Pandas在电商数据处理中的核心应用与实战技巧 做电商数据处理这几年我电脑里用得最频繁的工具不是Excel也不是SQL客户端而是Pandas。Excel处理几万行订单没问题一旦上了百万行就卡得想砸电脑SQL能处理大数据量但写复杂清洗逻辑绕来绕去临时想快速验证一个想法还得建临时表。Pandas正好卡在中间数据量中等偏上逻辑可以链式写还能和Python生态无缝衔接。这篇是系列的第二篇专门聊Pandas在电商数据处理里的核心价值覆盖数据清洗、分组聚合、多表关联、性能优化这些高频场景最后附上我实际踩过的坑。这篇文章适合三类人看一是做电商运营的同学经常要导数据做分析但被重复性工作折磨二是刚转Python的数据分析师会基础语法但不知道Pandas在真实业务里怎么发力三是已经在用Pandas但总感觉代码写不顺、跑得慢、容易出Bug的开发者。我会尽量用具体的业务场景来讲配合代码示例争取你看完就能直接在业务里用。1. 电商数据的真实面貌又脏又乱但Pandas刚好能治1.1 电商数据的几个典型“脏乱差”特征电商行业的数据来源特别杂。ERP导出的订单表、CRM里的用户表、第三方平台后台的报表、埋点日志、客服工单导出每个系统的导出格式都不一样甚至同一个系统不同版本的导出格式都可能变。字段命名更是五花八门用户ID可能叫user_id也可能叫userId还可能是纯中文“买家ID”。日期格式今天长这样“2024-01-05 13:22:11”明天变成“2024/1/5 13:22:11”后天又变成文本型“20240105”。字段类型也经常错乱价格列明明是数字导出以后变成带货币符号的字符串“¥199.00”下单数量“12”被识别成文本手机号“13800138000”显示成科学计数法。这些问题在Excel里手动改几个还行数据量一大每次都重新来一遍纯粹浪费生命。更头疼的是数据质量问题。同一个用户一天下了三单其中一单是退款单但报表里还在地址栏大量缺失金额出现负数商品类目有“男装”和“男装 ”尾随空格两种写法还有一批重复订单是运营测试的时候刷出来的统计GMV的时候不排除就是错误的。这些问题就是电商数据处理的核心工作内容而Pandas在处理这些问题时有一套非常顺手的工具集。1.2 为什么Excel和SQL都差一口气先说Excel。Excel处理电子表格确实方便但表格的行数是有限制的超过104万行就写不进去了实际使用中几十万行就会明显卡顿。更麻烦的是处理步骤不可复现你手动删了几行、改了某个公式过了一个月想再分析一遍新数据只能重新操作。Excel的VBA虽然能做自动化但写起来调试成本很高。再说SQL。SQL在聚合查询上很强但做数据清洗特别别扭。你想把价格列里的“¥”去掉再转成数值SQL要写REGEXP_REPLACE再CAST一套组合拳下来很啰嗦想做多步骤的中间变量要么不断嵌套子查询要么建临时表。而且SQL查出来结果以后想用Python做后续画图、建模还得导出来再读一遍链路很长。SQL还有一个麻烦点临时分析一个Excel导出的文件总不至于先建库导表再查吧等待的成本太高。Pandas的定位是用内存计算的方式把“读取、清洗、变换、聚合、分析”这一整条链路串起来。它不要求你先建表直接读一个文件就能开始处理处理过程是一行行代码可复现、可修改、可自动化处理完的结果可以直接画图、直接进模型、也可以再导出Excel报表。用一个不太严谨的类比Excel像手工小作坊SQL像流水线工厂Pandas是灵活多变的加工车间。1.3 一个很典型的场景月底订单表清洗我遇到过最典型的场景是每月底要把某渠道的订单汇总表整理出来。那张表从后台导出以后表头占了前两行金额列带“¥”前缀下单时间能分得出来是文本但格式乱七八糟表格里还有大概2000条重复记录。以前用Excel处理打开一个几十万行的文件就够呛手动去重万一漏掉就出问题。用SQL处理呢还得先把这个Excel导进数据库又是创建表又是配字段类型太磨人。后来我一次性写了这段代码搞定import pandas as pd df pd.read_excel(orders.xlsx, header1) # 跳过前两行表头 df[amount] df[amount].str.replace(¥, , regexFalse).astype(float) df[pay_time] pd.to_datetime(df[pay_time]) df df.drop_duplicates(subset[order_id], keepfirst)整个过程不到十行。这就是Pandas在电商数据处理里的第一价值把“脏乱差”的数据在短时间内处理成干净可用的数据并且整个过程全透明、可复用。你把这个脚本存下来下个月换个文件名运行一遍又出结果了。2. 数据清洗四板斧读取、去重、补缺、转类型2.1 读取Excel和CSV类型推断是最容易翻车的环节pandas读取Excel文件是高频操作很多新手在第一步就翻车。直接运行pd.read_excel(order.xlsx)最常见的报错是ImportError: Missing optional dependency openpyxl. Use pip or conda to install openpyxl.意思是少了openpyxl这个引擎装一下就行pip install pandas openpyxl读取的时候有几个参数非常关键。第一个是sheet_name一个Excel里可能有多个Sheet默认只读第一个想读指定Sheet就写sheet_name订单明细。第二个是header很多导出的表头占了两行甚至做了合并单元格要用header1指到第二行。第三个是dtype这个最容易被忽略。比如用户ID字段“00123”如果让Pandas自动推断它会当成整数123前面的0直接丢掉后面关联用户表就对不上了。解决办法是指定读取类型df pd.read_excel(user.xlsx, dtype{user_id: str})读CSV文件也一样注意编码问题。国内导出的CSV经常是GBK编码读的时候要加encodinggbk否则中文全是乱码。列名前后可能有空格读取以后跑一下df.columns df.columns.str.strip()做一次清理。我建议每次读完数据马上执行df.info()和df.head()看一眼字段类型和样例数据再往下继续这个习惯能避免一大批隐性Bug。2.2 两列同值取第一条drop_duplicates的完整用法去重是电商数据处理里的高频操作。很多新手只知道df.drop_duplicates()但这个函数默认是在所有列都相同时才去重真实业务里经常只针对某几列判断重复。比如你统计一个用户是否在某个日期下过单有一个用户一天下单三次对“用户日期”这个维度来说就是重复记录但不代表订单本身重复。这时候就要用subset参数指定哪些列相同就算重复。假设你有一个订单表字段包括user_id用户ID、order_date下单日期、order_amount订单金额现在想保留每个用户每天的第一条订单直接这样写df_clean df.drop_duplicates(subset[user_id, order_date], keepfirst)keepfirst表示保留重复项中的第一条keeplast表示保留最后一条keepFalse表示删除所有重复项。热搜词里那个“如果指定两列的值均相同则取第一条数据即可”说的就是这种写法。这里有个容易踩坑的点如果不先排序keepfirst保留的“第一条”是原始文件里的顺序不一定是业务上想要的那条。比如你想保留每个用户每天最新的一笔订单就要先按时间倒序排序再去重df_sorted df.sort_values(order_time, ascendingFalse) df_clean df_sorted.drop_duplicates(subset[user_id, order_date], keepfirst)另外再说个容易被忽视的点很多新手习惯在drop_duplicates里写inplaceTrue我建议少用因为这个操作会直接修改原对象不利于排查问题。更推荐把结果赋值给新变量保留原始数据做对照。数据清洗讲究的是“可回溯”而不是“原地破坏”。2.3 缺失值处理先看业务含义再决定删还是补缺失值处理不能上来就dropna()干掉所有带空值的行。一行订单有几十个字段只有一个字段缺失就整行删除很可能把有价值的订单全丢光了。正确的做法是先用df.isnull().sum()看一下每列的缺失数量再结合业务判断。我处理电商订单表时会把缺失值分成三类。第一类是“绝对不能缺失”的字段比如user_id、order_id这类缺失说明数据本身有问题处理方式是删除或标记异常。第二类是“可以填充默认值”的字段比如收货地址缺失可以填未知或者用该用户最近一次订单的地址回填渠道来源缺失可以填其他不影响后续聚合统计。第三类是“缺失本身有意义”的字段比如退款金额缺失可能是这笔订单没有退款这种情况回填0比删除更合理。举个例子一个订单表里pay_time支付时间有3000条缺失如果这些订单都已经完成支付支付时间缺失会严重影响后续的时间维度分析。这时要么去找数据方补数要么根据创建时间做推断不能简单删掉。反过来如果refund_reason退款原因大量缺失但只有退款订单才会有这个字段那缺失反而是正常的。处理缺失值时还有个习惯先用df.copy()复制一份原数据再操作避免污染源头。因为一旦执行fillna这种操作原始数据被改了后面发现处理逻辑有问题想重来就没有参照物了。2.4 数据类型转换str、int、float、datetime的纠偏类型转换是新手从Excel思维转向Pandas思维最需要克服的一关。在Excel里你不太关心某个单元格到底是文本还是数字反正都能公式计算。但在Pandas里一列的数据类型决定了你能不能对它做运算、能做什么运算。价格列是字符串你直接df[price].sum()就会报错或者得到一串字符串拼接结果时间列是字符串你没法按月份聚合。常见的类型转换有这么几个# 字符串转数值 df[price] pd.to_numeric(df[price], errorscoerce) # 时间字符串转datetime类型 df[order_time] pd.to_datetime(df[order_time]) # 数值转字符串比如用户ID df[user_id] df[user_id].astype(str)pd.to_numeric里的errorscoerce参数很实用转换失败的值会变成NaN而不是直接报错这样你能先转换再看哪些值有问题。时间转换一般用pd.to_datetime它能自动识别大多数日期格式转完以后就可以直接取.dt.year、.dt.month做时间维度的分析。关于astype和to_numeric、to_datetime的选择我的经验是能用pd.to_numeric和pd.to_datetime就别用astype前者更智能、更容错。astype适合做确定性的类型转换比如把整数变成浮点数。这里顺带提一下numpy和pandas的关系。Pandas底层的Series和DataFrame本质上是用numpy数组搭起来的所以很多Pandas操作最终都是在调用numpy的函数。理解这一点你在做计算时就知道为什么Pandas的sum()、mean()跑得那么快因为底层是C语言实现的数组运算。而你要用numpy的场景也很明确当需要更灵活的数学函数或矩阵运算时可以直接对Series取.values转成numpy数组再操作。3. 从明细到汇总分组聚合算清核心经营指标3.1 groupby底层逻辑split-apply-combine如果要说Pandas里最核心的一个函数我的答案肯定是groupby。电商报表里百分之七八十的指标按日GMV、品类销量、渠道转化、地区分布底层都是分组聚合。groupby的原理用一句话概括是split-apply-combine把数据按某个字段拆成若干组针对每组应用一个聚合函数再把结果合并回一张表。用一个生活类比你有一筐水果要算每种水果的平均重量。第一步是分类把苹果、香蕉、梨分别堆成三堆第二步是分别称重求平均第三步是把每种水果的平均重量记到一张小卡片上。这就是groupby做的三件事。# 按商品类目分组统计每个类目的总销量 category_sales df.groupby(category)[quantity].sum()这个写法里df.groupby(category)是分组[quantity]是选定要聚合的列.sum()是聚合方式。Pandas会把类目作为索引每个类目对应的总销量作为结果。如果不想让类目做索引而是做普通列后面加一句.reset_index()。Groupby比Excel数据透视表更舒服的一点是它完全可以链式操作。你可以在分组聚合后再排序、再筛选、再画图一条流水线下来不用手动点来点去。3.2 高频业务指标怎么落地电商数据分析里的几个高频指标用groupby都能直接算出来。每日GMV成交总额的写法是df[order_date] df[order_time].dt.date daily_gmv df.groupby(order_date)[amount].sum()客单价指标要小心客单价 成交总额 / 成交订单数不是对每笔订单金额求平均。虽然数值上经常一样但业务定义里的“订单数”通常指有效的成交订单数所以更稳妥的写法是分别sum以后手动相除。平均订单金额用df.groupby(order_date)[amount].mean()会默认每个订单权重一样没问题但如果你要做支付成功的订单就要先过滤掉未支付的。各品类销量排名top_categories df.groupby(category)[quantity].sum().sort_values(ascendingFalse).head(10)地区维度的分析province_stats df.groupby(province).agg({ amount: sum, order_id: count }).rename(columns{amount: gmv, order_id: order_count})复购率分析是电商里的经典指标。思路是先统计每个用户的订单数再看订单数大于等于2的用户占比user_order_count df.groupby(user_id)[order_id].nunique() repurchase_rate (user_order_count 2).mean()这里的nunique统计的是每个用户去重后的订单数比count更准确因为一张订单可能因为退款出现重复行。这种“先分组再统计再二次分组”的思路在电商数据分析里非常常见。3.3 用agg一次算出多维指标有时候一个分组要同时算好几个指标比如按渠道分组既想看GMV又想看订单量还想看平均单价。这时候用agg就非常方便channel_stats df.groupby(channel).agg({ amount: [sum, mean, count], quantity: sum })这样算出来的结果会是一个多层列索引的DataFrame看起来会有点复杂所以聚合完一般会接一个reset_index()把分组字段变成普通列必要时再对列名做renamechannel_stats.columns [_.join(col).strip(_) for col in channel_stats.columns.values]agg的好处是只做一次分组计算同时得到多个指标性能比分别groupby几次要快得多。数据量大时比如几百万行这种写法能节省不少时间。如果你想对不同列用不同的聚合函数甚至对同一列用多个函数agg都是最清晰的表达方式。3.4 pivot_table用代码做数据透视表用过Excel数据透视表的同学对pivot_table一定不陌生。它和groupby的差异在于groupby的结果是“长表”一行一个分组pivot_table可以把某个字段变成列形成“宽表”更适合做交叉分析。比如你想看不同支付渠道在不同日期的GMV情况用pivot_table写pivot pd.pivot_table( df, valuesamount, # 要聚合的指标 indexorder_date, # 行维度 columnschannel, # 列维度 aggfuncsum, fill_value0 )参数对照Excel透视表来看很直观index相当于透视表的行columns相当于列values是需要汇总的数值字段aggfunc是汇总方式默认是求平均一般都会改成sum。fill_value0很实用因为不是每个日期都有所有渠道的订单没有数据的格子默认是NaN填成0以后画热力图、做后续计算都方便。pivot_table还有一个marginsTrue参数会在结果中自动加一行总计和一列总计对应Excel透视表里的“列汇总/行汇总”看合计数字的时候很方便。4. 多表拼接把订单、用户、商品串成一张大宽表4.1 merge关联的电商场景电商业务很少有只分析一张表就能得出结论的场景。订单表里存的是user_id但你得关联用户表才能知道下单的人的性别、年龄、所在城市订单明细表里存的是product_id你得关联商品表才能知道类目、品牌、毛利率。所以多表关联几乎是每天都要做的事。Pandas里做横向关联核心是merge用法和SQL的JOIN很像df_order_user pd.merge( df_orders, df_users, onuser_id, howleft )how参数决定关联方式left、right、inner、outer。在电商场景里我大部分时间用left以订单表为主表去补用户信息。这样即使有的用户已经在用户表里注销了订单数据也不会丢只是用户信息字段会变成NaN。用inner反而可能导致丢失订单。如果两个表里的关联字段名字不一样比如一个是user_id一个是userId就用left_on和right_on分别指定pd.merge(df_orders, df_users, left_onuser_id, right_onuserId, howleft)关联完以后两个表都有“用户ID”这个字段时Pandas会自动生成user_id_x和user_id_y容易造成混淆。要么在merge之前删掉多余列要么加suffixes(_order, _user)明确区分。4.2 concat纵向拼接的适用场景concat和merge的分工很明确concat负责拼接merge负责关联。拼接有两种场景纵向拼接多天的数据文件或者横向拼接几个字段结构不同的表。最典型的是“每天一个订单文件要合并成全量”。比如三天分别导出三个CSV字段结构完全一样用pd.concat拼起来df_all pd.concat([df_0410, df_0411, df_0412], ignore_indexTrue)这里ignore_indexTrue很关键。如果不加拼接后的结果会保留每个原始DataFrame自己的索引新的全量表可能出现大量重复的索引编号后续用.loc取数据或者做reset_index都很容易出错。加上以后索引从0开始按顺序重新编号。concat还可以横向拼接通过axis1参数控制。但横向拼接要特别注意索引对齐的问题两个DataFrame的索引顺序如果不一样直接横向拼接会出现错位或者大量NaN而且很难排查。我的经验是横向拼接前先对两个DataFrame的索引做reset_index(dropTrue)或者确认它们来自同一个清洗流程、索引完全一致否则不如用merge指定关联字段更可靠。4.3 关联时最容易出现的三个事故第一个事故是“一对多导致数据膨胀”。订单表里一个订单一行订单明细表里一个订单可能有三行买了三个商品。你用订单表去关联订单明细表一条订单会变成三行如果不注意后续对金额做sum订单金额会被算三遍。解决办法是关联之前先想清楚这张表的主键是什么明细表能不能先按订单聚合后再关联。第二个事故是“字段类型不一致导致关联不上”。订单表里user_id是整数用户表里user_id是字符串因为导出的Excel把用户ID变成了文本merge完了你会发现用户信息全是NaN。排查方式是在merge之前检查两边的dtypesprint(df_orders[user_id].dtype) print(df_users[user_id].dtype)不一致就先统一类型再关联。第三个事故是“关联列名冲突”。两个表都有order_amount字段merge之后自动生成order_amount_x和order_amount_y你不注意的话拿错列做计算结果肯定不对。所以做merge时我通常会把两个表里不需要的字段先删掉只保留关联字段和分析需要字段减少混淆。5. 性能优化与工具边界别让Pandas做它不该做的事5.1 向量化是第一原则别用iterrows很多从Excel思维转过来的人习惯用循环处理数据“遍历每一行如果怎么样就怎么样”。在Pandas里你最不应该写的就是iterrows()循环。因为DataFrame的每一行都封装了大量信息逐行遍历要反复创建Series对象性能极差几十万行下去代码能跑到怀疑人生。举个例子你想根据用户等级给订单金额打9折用循环写for i, row in df.iterrows(): if row[user_level] VIP: df.loc[i, discount_amount] row[amount] * 0.9这个写法在几十万行数据上会非常慢。向量化写法一行搞定df[discount_amount] np.where( df[user_level] VIP, df[amount] * 0.9, df[amount] )np.where本身就是numpy的向量化操作直接对整列做条件判断和计算速度快几十倍。如果逻辑比较复杂也可以先用df[is_vip] df[user_level].eq(VIP)生成一个布尔列再做四则运算。Pandas的绝大多数字段操作都是按列计算你要习惯“按列思考”而不是“按行思考”。实在找不到现成的向量化方法再考虑apply但能用内置方法优先用内置方法。5.2 数据类型瘦身内存占用可以砍一半处理几万行的数据时没人关心内存可一旦数据量上到几百万行内存占用就会成为大问题。前阵子我处理一个电商平台的全量订单表导进来以后大概600万行df.info()显示内存占用1.2GB我做了两步优化直接降到420MB。第一步是缩小整型字段的字节数。Pandas默认会用int64存储整型数据但很多字段根本不需要那么大范围。比如age最多一百多用int8就够了order_status字段只有0、1、2三种值换成int8完全够。做法是df[age] df[age].astype(int8)第二步是把低基数分类字段转成category类型。比如channel字段只有“App”“小程序”“H5”三种取值都是object类型Pandas每行都要存一份完整字符串很浪费。转成category后底层只存整数编码和映射表节省大量内存df[channel] df[channel].astype(category)用df.info(memory_usagedeep)可以查看优化前后的内存占用变化。这不是什么高端技巧但在数据量大的时候光靠类型压缩就能让Pandas从“跑不动”变成“流畅运行”性价比很高。5.3 分块读取中等规模数据也能“流式”处理还有一种情况是文件本身太大内存直接装不下。比如一个5GB的CSV订单文件服务器内存只有8GB直接pd.read_csv会报MemoryError。解决办法是分块读取一次只读一部分进行处理chunk_iter pd.read_csv(orders_big.csv, chunksize500000) total_gmv 0 for chunk in chunk_iter: total_gmv chunk[amount].sum()chunksize指定一块多少行pd.read_csv每次返回一个DataFrame你处理完一块再取下一块。这种模式其实就是一种简单的流式数据处理在单机资源有限的情况下能覆盖相当一部分中等规模数据的处理需求。逐块聚合、逐块写入数据库、逐块做清洗后再拼接都能实现。不过要清醒一点真正的流式处理比如数据持续不断到达、实时聚合、大规模分布式计算Pandas并不擅长。那些场景需要Kafka、Flink、Spark Streaming这些专门框架。Pandas分块读取解决的是一次性处理大文件时的内存问题不是实时流计算。5.4 什么时候该换更重的框架Pandas不是万能的。我个人的经验判断标准是单机内存放不下、或者处理时间超过你的耐心阈值就该考虑换工具。比如几千万行数据做复杂关联Pandas硬扛也能跑但内存压力大、耗时长。这时有几种替代方案PolarsPython生态里速度很快的DataFrame库API和Pandas类似学习成本低单机性能更好。Dask接口模仿Pandas但支持分布式计算可以在多核或多机环境下处理更大的数据。ClickHouse分析型数据库聚合查询极快适合已经结构化的数据频繁做OLAP分析。Spark适合分布式大数据场景和Pandas API有点像但不是一回事。我不是劝你抛弃Pandas而是想说每个工具有自己的边界。Pandas最舒服的场景是百万级到千万级的数据量做探索性分析和清洗加工数据再往上走就要考虑更重的工具。判断标准和“什么时候换工具”应该是你技术进阶路上必须具备的意识。6. 常见问题与排查技巧实录6.1 从安装到运行新手最容易踩的几个坑先说安装。很多人在PyCharm里装Pandas实际的操作路径是File - Settings - Project - Python Interpreter点击右上角的“”号搜索pandas点击Install Package。装完以后如果代码还是提示No module named pandas先检查当前解释器是不是你装包的那个解释器。PyCharm底部状态栏能看到当前解释器路径很多人会在项目里创建虚拟环境虚拟环境里的包和全局环境是隔离的。命令行安装更直接pip install pandas读取Excel之前记得装openpyxlpip install pandas openpyxl至于版本适配Python 3.10这个版本比较特殊很多老版本Pandas对它有兼容性问题建议直接装Pandas 1.5以上或者2.x版本。用Python 3.8、3.9的可以装1.3以上版本。最简单的方法是直接用pip install pandas装最新稳定版它一般会兼容当前的主流Python版本。6.2 读Excel报错、类型错乱、内存溢出等问题的排查对照我在多个项目里梳理过一份Pandas高频问题速查表直接给出来供参考问题现象可能原因解决方案读Excel报错Missing optional dependency openpyxl缺少Excel读取引擎pip install pandas openpyxl或者安装xlrd并指定engine读CSV中文变乱码文件是GBK编码默认用UTF-8读取pd.read_csv(path, encodinggbk)不确定时试encodinggb18030用户ID前导0丢失读取时被推断为整数dtype参数显式指定为str如dtype{user_id: str}时间列转完还是object原始格式不统一或有非法值使用errorscoerce加pd.to_datetime转完检查NaN数据量一多就内存溢出字段类型过于“胖”或文件太大类型瘦身、category转化或分块读取聚合结果出现奇怪的总计数据存在重复行没去重先做drop_duplicates再聚合SettingWithCopyWarning警告链式赋值对切片副本操作在切片操作后加.copy()或者改用.loc列名被自动加_x和_y关联的两个表有重名列merge时加suffixes或先删不需要的重名打印结果被省略号截断显示设置默认限制行列数pd.set_option(display.max_columns, None)pd.set_option(display.max_rows, None)这张表不是终点但它能帮你快速定位日常生产环境中反复出现的那几类问题。遇到新问题不要慌我的排查思路永远是三步先看数据长什么样子再确认操作有没有按预期执行最后用最小数据集复现问题。6.3 我自己的几个避坑习惯最后分享几个我在实际使用中形成的习惯算不上标准答案但确实帮我避过不少坑。第一个习惯每次读入数据之后先跑一遍df.info()和df.head()再花几秒钟看一眼字段类型和样例数据。不要急着写业务逻辑类型不对、列名带空格、编码乱码这些问题如果前期不发现后面所有分析结果都可能跑偏。第二个习惯清洗之前先df df.copy()一份。Pandas很多操作会返回新对象但inplaceTrue或链式赋值时可能会修改原数据一旦处理链很长中途某个环节改坏了原文件没有备份只能从头再来。第三个习惯做聚合之前先确认关键字段没有缺失和类型问题。特别是按时间分组时时间字段必须是datetime类型否则会出现“按字符串排序”导致的顺序错乱按金额聚合时金额字段必须是数值型有NaN要提前处理否则sum的结果可能和你预期差很远。第四个习惯凡是涉及用户手机号、身份证号、详细地址等敏感字段在写代码、出报表、发文档之前要主动打码或者用脱敏函数处理。技术能力再强数据安全这根弦也不能松。我个人做数据处理的心法是先把数据读进来用info()、head()、value_counts()快速摸一遍类型和分布再动刀。磨刀不误砍柴工这个习惯让我避开了无数个隐藏的坑也让我处理电商数据的速度稳定下来了。Pandas在电商数据处理中的核心价值说到底就是把这套高频动作变成可复用、可信赖的工程能力认真掌握它数据分析和报表效率都会上一个台阶。
返回列表