警告原因
“A value is trying to be set on a copy of a slice from a DataFrame” 是由于在尝试修改切片的副本时引发的警告。这通常是由于在对切片进行操作时,没有正确地使用索引或赋值操作。
如果在使用 .loc 选择器进行赋值时仍然收到警告,可能是由于数据框的复制或引用方式导致的。为了解决这个问题,可以尝试使用 .copy() 方法来创建数据框的副本,然后对副本进行操作
解决方法
为了避免出现这个警告,可以使用 .loc 或 .iloc 选择器来明确地对 DataFrame 进行操作,而不是对其副本进行操作。下面是修改代码以避免警告的示例:
import pandas as pd
# 创建示例DataFrame
data = {'A': [1, 2, 3, 4, 5],
'B': ['1.5', '3.7', '2.9', '4.2', '2.1'],
'C': ['2.2', '4.1', '3.5', '1.8', '2.9']}
df = pd.DataFrame(data)
# 创建副本并将列 B 和列 C 转换为浮点数
df_copy = df.copy()
df_copy.loc[:, 'B'] = df_copy['B'].astype(float)
df_copy.loc[:, 'C'] = df_copy['C'].astype(float)
# 计算列 B 和列 C 的平均值
mean_b = df_copy['B'].mean()
mean_c = df_copy['C'].mean()
print("列 B 的平均值:", mean_b)
print("列 C 的平均值:", mean_c)