除了使用 apply 和 np.where 方法来更新 DataFrame 列,pandas 还提供了其他几种方法可以用来根据条件更新列。下面我将介绍几种常用的方法:
方法 0:使用 numpy 的 np.where 方法来实现效果:
import pandas as pd
import numpy as np
# 创建示例 DataFrame
data = {
'品类': ['音箱配件临时', '指纹锁', '其他类别', '指纹锁', '音箱配件临时']
}
main_3c = pd.DataFrame(data)
# 使用 np.where 根据条件更新 '品类' 列
main_3c['品类'] = np.where(main_3c['品类'] == '音箱配件临时', '音箱/音响',
np.where(main_3c['品类'] == '指纹锁', '电子锁', main_3c['品类']))
# 打印结果
print(main_3c)
方法 1:使用 .loc 方法
.loc 方法可以用于基于条件选择和更新 DataFrame 的部分。
import pandas as pd
# 创建示例 DataFrame
data = {
'品类': ['音箱配件临时', '指纹锁', '其他类别', '指纹锁', '音箱配件临时']
}
main_3c = pd.DataFrame(data)
# 使用 .loc 方法根据条件更新 '品类' 列
main_3c.loc[main_3c['品类'] == '音箱配件临时', '品类'] = '音箱/音响'
main_3c.loc[main_3c['品类'] == '指纹锁', '品类'] = '电子锁'
# 打印结果
print(main_3c)
方法 2:使用字典和 .replace 方法
replace 方法可以用于将列中的值替换为新值。
import pandas as pd
# 创建示例 DataFrame
data = {
'品类': ['音箱配件临时', '指纹锁', '其他类别', '指纹锁', '音箱配件临时']
}
main_3c = pd.DataFrame(data)
# 使用 .replace 方法根据条件更新 '品类' 列
replace_dict = {
'音箱配件临时': '音箱/音响',
'指纹锁': '电子锁'
}
main_3c['品类'] = main_3c['品类'].replace(replace_dict)
# 打印结果
print(main_3c)
方法 3:使用 map 方法
map 方法适用于将一列中的值映射为另一列中的值。
import pandas as pd
# 创建示例 DataFrame
data = {
'品类': ['音箱配件临时', '指纹锁', '其他类别', '指纹锁', '音箱配件临时']
}
main_3c = pd.DataFrame(data)
# 使用 map 方法根据条件更新 '品类' 列
map_dict = {
'音箱配件临时': '音箱/音响',
'指纹锁': '电子锁'
}
main_3c['品类'] = main_3c['品类'].map(map_dict).fillna(main_3c['品类'])
# 打印结果
print(main_3c)
方法 4:使用 mask 方法
mask 方法可以用于根据条件替换值。
import pandas as pd
# 创建示例 DataFrame
data = {
'品类': ['音箱配件临时', '指纹锁', '其他类别', '指纹锁', '音箱配件临时']
}
main_3c = pd.DataFrame(data)
# 使用 mask 方法根据条件更新 '品类' 列
main_3c['品类'] = main_3c['品类'].mask(main_3c['品类'] == '音箱配件临时', '音箱/音响')
main_3c['品类'] = main_3c['品类'].mask(main_3c['品类'] == '指纹锁', '电子锁')
# 打印结果
print(main_3c)
方法 5:使用 applymap 方法(适用于更新整个 DataFrame)
如果你需要更新整个 DataFrame 的值,可以使用 applymap 方法。
import pandas as pd
# 创建示例 DataFrame
data = {
'品类': ['音箱配件临时', '指纹锁', '其他类别', '指纹锁', '音箱配件临时'],
'其他列': ['值1', '值2', '值3', '值4', '值5']
}
main_3c = pd.DataFrame(data)
# 使用 applymap 方法更新整个 DataFrame
def replace_values(x):
if x == '音箱配件临时':
return '音箱/音响'
elif x == '指纹锁':
return '电子锁'
return x
main_3c = main_3c.applymap(replace_values)
# 打印结果
print(main_3c)
这些方法各有优缺点,选择哪种方法取决于你的具体需求和 DataFrame 的规模。例如,apply 方法适用于复杂的行级别逻辑,而 .loc 和 np.where 方法通常在性能方面更优。