如何高效拆分Pandas DataFrame中YYYYMM格式列为年月两列?
高效拆分YYYYMM格式列的方法
你当前用apply()逐行调用自定义函数的方式效率很低,尤其是数据量大的时候,下面是几种更优的向量化解法,速度能提升几个数量级:
方法1:纯数值运算(最快)
如果你的YYYYMM列是整数类型,直接用整除和取余操作,完全不需要字符串转换:
df['Year'] = df['YYYYMM'] // 100 df['Month'] = df['YYYYMM'] % 100
方法2:字符串切片(简洁直观)
如果列是整数或字符串类型,转成字符串后直接切片:
# 先转字符串,再切片提取年、月 date_str = df['YYYYMM'].astype(str) df['Year'] = date_str.str[:4].astype(int) df['Month'] = date_str.str[-2:].astype(int)
方法3:正确使用datetime方法
你之前尝试datetime处理未果,大概率是没指定format参数,明确格式后可以轻松提取年和月:
# 转换为datetime类型(指定格式避免自动推断出错) df['date'] = pd.to_datetime(df['YYYYMM'], format='%Y%m') # 提取年、月 df['Year'] = df['date'].dt.year df['Month'] = df['date'].dt.month # 不需要中间date列可以删除 df.drop('date', axis=1, inplace=True)
为什么你的原方法慢?
apply()是逐行遍历执行函数,属于循环操作,而pandas的向量化操作(比如上面的数值运算、字符串切片、datetime方法)是底层用C实现的批量处理,效率差距极大。另外你的自定义函数里还做了字符串转列表、join等冗余操作,进一步拖慢了速度。
内容的提问来源于stack exchange,提问作者ClovenOrb
相关产品推荐
相关产品推荐

