如何用Pandas在单行代码中完成多步数据处理操作?
链式调用实现数据清洗流程
直接用Pandas的链式调用可以把所有步骤合并为一行,同时修正原代码里的几处小问题(比如列名大小写不一致、变量名错误、求和列名错误):
final_df = ( df[['transaction Date', 'amount', 'distance']] .assign(**{'transaction Date': pd.to_datetime(df['transaction Date'], unit='D', origin='1899-12-30')}) .query('distance.notnull() and `transaction Date` > "2021-01-01"') .groupby(pd.Grouper(key='transaction Date', freq='W'))['amount'] .sum() )
各步骤对应说明:
- 筛选列:
df[['transaction Date', 'amount', 'distance']]对应原步骤1,保留需要的三列 - 转换日期格式:用
.assign()方法替换原日期列,对应原步骤2,解决Excel日期转标准格式的问题 - 过滤数据:用
.query()替代布尔索引,写法更简洁,对应原步骤3的双条件过滤 - 按周分组求和:直接链式调用
groupby()和sum(),这里把原代码中不存在的'values'改为实际存在的'amount',对应原步骤4
如果喜欢更紧凑的单行写法(不换行):
final_df = df[['transaction Date', 'amount', 'distance']].assign(**{'transaction Date': pd.to_datetime(df['transaction Date'], unit='D', origin='1899-12-30')}).query('distance.notnull() and `transaction Date` > "2021-01-01"').groupby(pd.Grouper(key='transaction Date', freq='W'))['amount'].sum()
内容的提问来源于stack exchange,提问作者Valentin Galardi
相关产品推荐
相关产品推荐

