Pandas持久化排序问题:如何遍历已排序DataFrame
问题解决:Pandas排序后逐行遍历排序结果
场景说明
现有8列文本文件,首行是带#的注释行,无数据列名。通过以下代码导入为DataFrame后,按第7列升序排序得到dataS,需逐行遍历排序后的结果:
import pandas as pd data = pd.read_csv("file.txt", sep='\t', comment='#', header=None) dataS = data.sort_values(7)
示例文本:
#0.y[m] 1.uy[m_e*c] 2.x[m] 3.ux[m_ec] 4.z[m] 5.uz[m_ec] 6.w 7.ID 4.800773e-06 5.825619e+00 9.693396e-06 1.732705e+00 1.068944e-05 -3.532225e+00 1.255580e+04 24641553 4.359847e-06 1.275340e+01 9.564333e-06 -3.591681e-01 9.690643e-06 7.398885e+00 1.255580e+04 18676620
解决方法
方法1:直接遍历已排序的dataS
data.sort_values(7)默认返回新的排序后DataFrame,dataS已经是排序后的结果,直接遍历即可。推荐使用itertuples()(性能优于iterrows()):
# 遍历排序后的每一行,索引占第0位,后续变量对应各列值 for row in dataS.itertuples(index=True, name='Pandas'): # 示例:打印第7列(ID列)的值 print(row[8]) # 也可通过属性名访问 print(getattr(row, '_8'))
如果需要同时获取行索引和列值,用iterrows():
for idx, row in dataS.iterrows(): # 打印第7列的值 print(row[7])
方法2:原地排序(修改原DataFrame)
如果希望直接将原data替换为排序后的状态,可添加inplace=True参数,之后遍历data即可:
data.sort_values(7, inplace=True) # 遍历已排序的原DataFrame for idx, row in data.iterrows(): print(row[7])
内容的提问来源于stack exchange,提问作者cbontoiu
相关产品推荐
相关产品推荐

