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

2024-09-25 06:21:00 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

^{pr2}$

我想用dict中的映射值替换列中的每个值。目前我正在尝试执行类似的操作,但是遇到了一个错误。预期产出应为

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'))

有人能给我一个正确而快速的方法吗?在


Tags: 数据dataframepandasdfmbreplacecol2col1
2条回答

试试这个:

df.loc[:, df.dtypes=='object'] = df.select_dtypes(['object']).replace(mapping, regex=True)

这将仅将mapping应用于string


如果所有列都是string(object)数据类型:

^{pr2}$

或者正如@JohnGalt在评论中提出的:

df = df.applymap(lambda x: mapping[x])

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

相关问题 更多 >