Pandas DataFrame单行返回元组且异常的原因及解决办法
解决Pandas iterrows()遍历后无法按索引取值的问题
你对iterrows()的返回值理解有误——它返回的每个元素是**(行索引, 行数据Series)**的元组,不是仅包含行值的元组。你看到的“包含列名且无值分隔”是打印Series时的默认显示形式,并非元组本身的结构问题。
正确使用iterrows()的方式
遍历过程中,第二个元素row是Series类型,可以直接按列名或位置索引取值:
import pandas as pd # 示例DataFrame df = pd.DataFrame({ 'i': [1, 2], 'function': ['父亲', '母亲'], 'name': ['张三', '李四'], 'ident': ['ID001', 'ID002'], 'info': ['中年男性', '中年女性'] }) for idx, row in df.iterrows(): # 按列名取值 print(row['name']) # 按位置索引取值(对应列的顺序) print(row[2])
更高效的遍历替代:itertuples()
如果偏好类似元组的结构,可以用itertuples(),它返回命名元组(namedtuple),既支持按列名属性取值,也支持按索引取值,性能比iterrows()更高:
for row in df.itertuples(index=False): # index=False 不返回行索引 # 按列名属性取值 print(row.name) # 按索引取值 print(row[2])
关于写入Excel的建议
完全不需要遍历每行再写入!Pandas直接提供to_excel()方法可以快速将整个DataFrame写入Excel:
# 写入Excel,index=False 不导出行索引 df.to_excel('家庭关系数据.xlsx', index=False)
如果需要先处理部分行数据,建议将处理后的结果整理成新的DataFrame,再调用to_excel(),这比逐行写入效率高得多。
内容的提问来源于stack exchange,提问作者OnceUponATime
相关产品推荐
相关产品推荐

