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

标签 python pandas dataframe replace

我在 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

关于python - 在整个数据框python中同时替换多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45335977/

相关文章:

python - 从多列 pandas 数据框构建 networkx 有向图或流程图

r - 数据框中的随机列样本

python - 使用 OpenCV Python,如何使所有黑色像素透明,然后将其覆盖在原始图像上

python - 在 pandas 中连接 2 列 - AttributeError : 'DataFrame' object has no attribute 'concat'

python - 使用 os.walk() 生成包含中间目录的文件名

python - 使用python实现异构csv的数据结构

python - 在 pyspark 中累积数据帧的最有效方法是什么?

python - 获取与数据帧的另一个值最接近的值

python - 如何以列的形式获取所有选择(例如,来自调查)的计数

python - 如何使用 python 过滤 CSV 文件中两个日期之间的行并重定向到另一个文件?