Pandas如何将表头含Price的列数值格式化为美元货币格式
实现方案
你可以根据自己的使用场景选择以下两种实现方式:
场景1:仅展示/导出Excel时格式化,保留原始数值类型(不影响后续数值计算)
如果你需要后续继续对价格列做求和、排序等数值运算,推荐用这种方式,仅在输出时做格式渲染,不会修改原始数据:
import pandas as pd # 先筛选所有表头含"Price"的列 price_cols = [col for col in df.columns if "Price" in col] # 导出到Excel时设置货币格式 with pd.ExcelWriter("格式化结果.xlsx", engine="xlsxwriter") as writer: df.to_excel(writer, index=False) workbook = writer.book worksheet = writer.sheets["Sheet1"] # 定义美元货币格式:带千分位分隔符、保留两位小数 currency_fmt = workbook.add_format({"num_format": "$#,##0.00"}) # 给所有价格列设置格式 for col in price_cols: col_index = df.columns.get_loc(col) # 三个参数分别是:列起始位置、列结束位置、列宽、格式 worksheet.set_column(col_index, col_index, 14, currency_fmt)
场景2:直接将DataFrame中的价格列转换为格式化后的字符串
如果你不需要后续做数值运算,只需要拿到格式化好的文本结果,直接用f-string格式化即可:
price_cols = [col for col in df.columns if "Price" in col] for col in price_cols: # 先把列转为数值类型,避免非数值报错 df[col] = pd.to_numeric(df[col], errors="coerce") # 格式化数值,空值返回空字符串 df[col] = df[col].apply(lambda x: f"${x:,.2f}" if pd.notna(x) else "")
格式化后效果完全符合你的要求:数值1399会转为$1,399.00,1538.9会转为$1,538.90。
内容的提问来源于stack exchange,提问作者Lukeberry Pi
相关产品推荐
相关产品推荐

