如何格式化pandas表格中含浮点数列的单元格数值?
Pandas单元格存浮点数列表时的数值格式化方案
当你的Pandas DataFrame单元格里是浮点数列表,而非单个浮点数时,常规的pd.set_option('float_format', ...)这类全局设置根本不管用——就像你给出的例子:
import pandas as pd df = pd.DataFrame(data={'Values':[[0.1231245678,0,0],[1e-10,0,0]]}) df
要把列表里的数值统一改成%.2f格式,最终显示成[0.12, 0.00, 0.00]和[0.00, 0.00, 0.00],可以用下面两种方法:
方法1:直接修改数据列(永久格式化)
用apply遍历目标列的每个列表,逐个格式化里面的浮点数,重新生成列表:
import pandas as pd df = pd.DataFrame(data={'Values':[[0.1231245678,0,0],[1e-10,0,0]]}) # 把每个浮点数格式化为带两位小数的字符串,组成新列表 df['Values'] = df['Values'].apply(lambda lst: [f"{num:.2f}" for num in lst]) # 如果需要保留数值类型(不是字符串),可以格式化后转回浮点数 # df['Values'] = df['Values'].apply(lambda lst: [float(f"{num:.2f}") for num in lst]) print(df)
运行后输出就是你要的效果:
Values 0 [0.12, 0.00, 0.00] 1 [0.00, 0.00, 0.00]
方法2:仅修改显示样式(不改动原始数据)
要是不想碰原始数据,只是希望查看时显示格式化后的效果,用Pandas的Styler自定义显示规则:
import pandas as pd df = pd.DataFrame(data={'Values':[[0.1231245678,0,0],[1e-10,0,0]]}) def format_list_elements(val): # 判断是否是列表,是的话逐个格式化 if isinstance(val, list): return [f"{num:.2f}" for num in val] return val # 应用样式到整个DataFrame styled_df = df.style.applymap(format_list_elements) styled_df
这样原始数据还是原来的浮点数列表,只是显示的时候变成了两位小数的格式。
为啥常规设置没用?
因为pd.set_option('float_format')和display.chop_threshold都是针对单个浮点数单元格的规则,当单元格是列表这种复合类型时,Pandas不会自动遍历列表内部元素去应用格式化,必须手动处理每个列表里的数值。
内容的提问来源于stack exchange,提问作者germ
相关产品推荐
相关产品推荐

