如何使用map更新DataFrame中Size列的单位转换后数据?
问题解决:修复Size列单位转换并更新DataFrame
你的代码主要有几个问题导致无法更新Size列:
change_size()是批量遍历整个列表的函数,没有返回值,不符合map需要的单个元素处理要求——map需要的是能接收单个Size字符串、返回转换后数值的函数。- 函数里的
a = [i][-1]完全多余,i本身就是单个Size值,这行等于没做任何操作。 - 函数只做了print输出,没有返回处理后的结果,所以
map(change_size())得到的全是None,赋值给Size列自然看不到正确数据。
修正后的代码
import pandas as pd import numpy as np import matplotlib.pyplot as plt, seaborn as sns %matplotlib inline import warnings warnings.simplefilter(action='ignore', category=FutureWarning) inp0 = pd.read_csv("googleplaystore.csv") # 重写处理单个Size值的函数 def convert_size(size_str): if size_str == 'Varies with device': return 0 # 判断单位是MB还是KB if size_str.endswith('M'): # 去掉M,转成浮点数后乘以1000转KB,再转整数 return int(float(size_str[:-1]) * 1000) elif size_str.endswith('k'): # 去掉k,转成整数 return int(size_str[:-1]) # 处理其他异常情况(比如空值) return np.nan # 使用apply处理整个Size列 inp0['Size'] = inp0['Size'].apply(convert_size) # 查看结果 print(inp0['Size'].head())
关键说明
convert_size函数专门处理单个Size字符串,返回对应的KB数值,符合apply/map的要求。- 使用
Series.apply()方法遍历每一行的Size值,把处理后的结果直接赋值回Size列,完成更新。 - 增加了异常情况的处理(比如空值),避免代码报错。
内容的提问来源于stack exchange,提问作者Prasun Roy
相关产品推荐
相关产品推荐

