You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas:用for循环与.loc创建新列时,新列值均为最后元素长度

问题原因

你循环里的df_marks['geometry']=len(std)会每次覆盖整个列,把所有行的geometry值都改成当前std的长度,循环结束后自然只剩最后一个元素的长度。要实现每行对应names元素的长度,得用.loc定位到对应行再赋值。

修正后的for循环写法
import pandas as pd

mydictionary = {'names': ['Somuli', 'Kiu', 'mol', 'Lixxxx'],
    'physics': [68, 74, 77, 78],
    'chemistry': [84, 56, 73, 69],
    'algebra': [78, 88, 82, 87]}

df_marks = pd.DataFrame(mydictionary)
print('Original DataFrame\n--------------')
print(df_marks)

# 初始化新列为数值类型,比空字符串更合理
df_marks['geometry'] = 0

print('\n\n DataFrame after adding "geometry" column\n--------------')

# 遍历每行的索引和对应的name值
for idx, name in df_marks['names'].items():
    # 用.loc定位到当前行的geometry列,赋值为当前name的长度
    df_marks.loc[idx, 'geometry'] = len(name)
   
print(df_marks)
更高效的Pandas原生写法

Pandas不推荐用循环处理行数据,数据量大时效率极低。直接用str.len()矢量化操作可以一键生成目标列,代码更简洁:

import pandas as pd

mydictionary = {'names': ['Somuli', 'Kiu', 'mol', 'Lixxxx'],
    'physics': [68, 74, 77, 78],
    'chemistry': [84, 56, 73, 69],
    'algebra': [78, 88, 82, 87]}

df_marks = pd.DataFrame(mydictionary)
# 直接生成每个name的长度列
df_marks['geometry'] = df_marks['names'].str.len()

print(df_marks)

内容的提问来源于stack exchange,提问作者Sagar Rawal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 17:02:31