Skip to main content
 首页 » 编程设计

python之在整个数据框python中同时替换多个值

2025年05月04日23zhujiabin

我在 pandas dataframe 中的许多列中都有数据,如下所示:

col1|   col2|   ...|   col99    |col100 
MBs|    Gigabytes|...|  MBs|    |MBs 
Megabytes|   GBs|...|Megabytes  |Gigabytes 
GB  |   Megabytes|  ...|Gigabytes|Gigabytes 
GBs |   GB     |...   |MBs  |Gigabytes 
Gigabytes|Megabytes|...|Gigabytes   |Megabytes 

我还有一本映射相似值的字典。例如,

mapping = {'Megabytes':'MB', 'Gigabytes':'GB', 'MBs':'MB','GBs':'GB', 'GB':'GB',} 

我想用字典中的映射值替换列中的每个值。目前我正在尝试做这样的事情但出现错误。预期输出应该是

col1|col2|...|col99|col100 
MB| GB|...| MB| |MB 
MB|GB|...|MB|GB 
GB |MB|...|GB|GB 
GB|GB|...|MB|GB 
GB|MB|...|GB|MB 
 
# My current implementation 
df = df.apply(lambda x: x.astype(str).replace('GBs', 'GB').replace('MBs', 'MB').replace('Megabytes', 'MB').replace('Gigabytes', 'GB')) 

有人可以指导我正确且更快的方法吗?

请您参考如下方法:

pd.DataFrame.replace 可以采用字典的字典,其中第一级键指定在替换时应用值的列。

我们可以使用字典理解来仅过滤那些属于dtype == object

的列
df.replace({c: mapping for c in df if df[c].dtype == object}) 
 
  col1 col2 col99 col100 
0   MB   GB    MB     MB 
1   MB   GB    MB     GB 
2   GB   MB    GB     GB 
3   GB   GB    MB     GB 
4   GB   MB    GB     MB