pandas导入CSV生成dataframe后遍历仅返回列如何实现按行遍历
问题原因
pandas 中直接对 DataFrame 执行迭代操作时,默认遍历的是 DataFrame 的列名,这是 pandas 的内置设计规则,因此你写的循环只会输出列名而非行数据。另外补充:pd.read_csv() 本身返回的就是 DataFrame 类型,你额外执行的 DataFrame(table_csv) 转换步骤是冗余的,可以直接省略。
可行实现方案
根据你的使用场景可以选择以下几种方案,优先推荐向量化操作,性能远高于循环遍历:
- 方案1:iterrows() 逐行遍历(适合小数据量简单场景)
iterrows()会逐行返回(行索引, 行数据Series)格式的元组,注意直接修改返回的行数据副本不会生效,需要通过loc定位修改原 DataFrame:for index, row in table_dataframe.iterrows(): # 打印整行数据 print(row) # 示例:修改当前行指定列的值 table_dataframe.loc[index, '目标列名'] = 替换的新值 - 方案2:itertuples() 逐行遍历(适合大数据量场景)
该方法返回命名元组,遍历速度比iterrows()快数倍,适合数据量较大的场景:for row in table_dataframe.itertuples(index=True): # 打印当前行某列的值,直接通过 .列名 访问即可 print(row.列名) # 修改方式和上面一致,通过行索引定位 table_dataframe.loc[row.Index, '目标列名'] = 替换的新值 - 方案3:向量化操作(优先推荐)
如果你要执行的是批量修改逻辑,优先用 pandas 内置的向量化操作,完全不需要写循环,性能最优:# 示例:给满足条件的行批量赋值,比如给age列大于18的行的is_adult列设为1 table_dataframe.loc[table_dataframe['age'] > 18, 'is_adult'] = 1
内容的提问来源于stack exchange,提问作者wow
相关产品推荐
相关产品推荐

