使用for循环对DataFrame列值平方仅生效最后一列,如何解决?
问题描述
我有一个包含2列整数值的DataFrame,原始数据如下:
| Apples | Bananas |
|---|---|
| 5 | 2 |
| 10 | 4 |
目标是对每一列的数值进行平方处理,处理后的结果应该是:
| Apples | Bananas |
|---|---|
| 25 | 4 |
| 100 | 16 |
我尝试用for循环实现,但没达到预期效果。先创建列名列表:
Columns = [Apples, Bananas]
然后写循环:
for column in Columns: df['squared'] = df[column]**2
这个循环只对最后一列做了平方处理。
解决方案
方法1:直接对整个DataFrame做平方运算(最简洁)
Pandas支持元素级批量运算,一行代码即可完成需求:
df = df ** 2
如果需要保留原始数据可以创建新DataFrame:
df_squared = df ** 2
方法2:修正for循环逻辑
你的循环问题在于每次都将平方结果赋值给同一个squared列,导致前一列的结果被后续循环覆盖。正确写法如下:
覆盖原列
columns = ['Apples', 'Bananas'] # 注意列名需用字符串包裹,避免被识别为变量 for column in columns: df[column] = df[column] ** 2
创建带标识的新列
如果不想修改原数据,可创建对应命名的新列:
columns = ['Apples', 'Bananas'] for column in columns: df[f'{column}_squared'] = df[column] ** 2
方法3:使用apply方法
通过apply对每一列应用平方函数:
df = df.apply(lambda x: x ** 2)
内容的提问来源于stack exchange,提问作者OneHotEncoder
相关产品推荐
相关产品推荐

