如何将DataFrame列中的浮点数列转换为百分比并保留1位小数
解决方法
可以通过Pandas的apply方法配合自定义函数实现需求,核心逻辑是对value列中每个列表的元素乘以100后,按示例要求格式化精度和类型:
步骤1:构造示例DataFrame
import pandas as pd # 模拟你的原始数据 data = { 'id': [1, 2, 3], 'name': ['AA', 'BB', 'CC'], 'value': [[0.0012, 0.0022, 0.365], [0.0412, 0.822, 0.03], [0.692, 0.0002, 0.56]] } df = pd.DataFrame(data)
步骤2:定义处理函数
这个函数会遍历列表中的每个数值,完成缩放、四舍五入,并根据数值类型转换为int或float(匹配示例中的显示格式):
def process_value_list(lst): processed = [] for num in lst: # 先乘以100缩放 scaled_num = num * 100 # 四舍五入到1位小数 rounded_num = round(scaled_num, 1) # 如果是整数,转成int类型;否则保留float if rounded_num == int(rounded_num): processed.append(int(rounded_num)) else: processed.append(rounded_num) return processed
步骤3:应用函数到DataFrame
df['value'] = df['value'].apply(process_value_list)
最终结果
执行后df的内容如下:
id name value 0 1 AA [0.1, 0.2, 36.5] 1 2 BB [4.1, 82.2, 3] 2 3 CC [69.2, 0.0, 56]
简化版(不区分int/float)
如果不需要刻意把整数转为int类型,只需要保留1位小数,函数可以简化为列表推导式:
df['value'] = df['value'].apply(lambda lst: [round(num * 100, 1) for num in lst])
结果会是[0.1, 0.2, 36.5]、[4.1, 82.2, 3.0]、[69.2, 0.0, 56.0],精度符合要求。
内容的提问来源于stack exchange,提问作者SM079
相关产品推荐
相关产品推荐

