当前位置:首页>python>python的库polars实现跨境电商财务核算中批量汇率转换

python的库polars实现跨境电商财务核算中批量汇率转换

  • 2026-09-07 04:54:23
python的库polars实现跨境电商财务核算中批量汇率转换

公众号后台(不是评论区)回复关键字 python库polars实现批量转换汇率 即可获取下载数链接(无密码,后台自动回复的链接复制到浏览器)(长按关键字复制粘贴即可,不必手写)

(不限行业,只是以跨境电商举例)

跨境电商行业,结算或者订单有很多列,从原始数据批量转换的时候,如汇率,有2种常用的方法。

方法1 是把宽表转成长表,即通过逆透视,把多列转成一列作为属性,只对值进行数值操作

方法2 是利用python的库polars很酷的1个功能,按照类型选择,并且支持剔除指定的某列

先看下数据示例

原币数据:

汇率:

注:表格里面的汇率使用动态数组生成的,每次打开都会不一样,可以数值粘贴后变成静态的。

方法1 :逆透视

import polars as pl path = r”D:\python库polars实现批量转换汇率.xlsx”df_原币数据 = (    pl.read_excel(path,sheet_name='原币数据')    .with_row_index('index')    .unpivot(        index = ['index','国家','币种','SKU','数量'],        variable_name='属性',        value_name='原币'    )    .with_columns(        pl.col('原币').cast(pl.Float64)    ))df_汇率 = (    pl.read_excel(path,sheet_name='汇率')     .with_columns(        pl.col('汇率').cast(pl.Float64)    )    # 防止通过币种出现多次造成重复    .unique(subset=['币种']))df_人民币 = (    df_原币数据    .join(        other=df_汇率,        left_on=['币种'],        right_on=['币种'],        how='left'    )    .with_columns(        (pl.col('原币') * pl.col('汇率')).alias('人民币')    ))# 此处应用2个检查# 检查1 : 是否有币种没有匹配到 # 检查2 : 是否匹配重复print(df_人民币)

方法2 :按照类型选择

import polars as pl import polars.selectors as cs path = r”D:\python库polars实现批量转换汇率.xlsx”df_原币数据 = (      pl.read_excel(path,sheet_name='原币数据')      .with_row_index('index'))df_汇率 = (      pl.read_excel(path,sheet_name='汇率')       .with_columns(          pl.col('汇率').cast(pl.Float64)      )      .unique(subset=['币种']))df_人民币 = (      df_原币数据      .join(          other=df_汇率,          left_on=['币种'],          right_on=['币种'],          how='left'      )        .with_columns(          # 保持原有列名,只是数字变成了人民币的          # cs.numeric().exclude('数量','汇率') * pl.col('汇率'),          # 新增列,名字可以用后缀 _人民币          (cs.numeric().exclude('数量','汇率') * pl.col('汇率')).name.suffix('_人民币'),      ))df_人民币.write_parquet('./df_人民币.parquet')# 此处应用2个检查# 检查1 : 是否有币种没有匹配到# 检查2 : 是否匹配重复print(df_人民币)

cs.numeric().exclude('数量','汇率') ,exclude里面把不想转换的都放上。

汇率也可以增加日期列 , 在join的条件里面增加日期。

.name.suffix('_人民币') , suffix后面写什么任意 ,也有 prefix作为前缀。

2个检查项:

检查是否有未匹配到的币种,写一个filter(pl.col('汇率').is_null()),然后看结果是否为空,不为空就是存在未匹配到的币种。

检查是否匹配重复,就是对index汇总 ,group_by 之后看每个index的计数(count 或者 len)是否有大于2的,存在的话就说明重复了。

最新文章

随机文章