找回密码
 会员注册
查看: 29|回复: 0

Pythonpandas对DataFrame进行遍历(持续更新)

[复制链接]

2万

主题

0

回帖

6万

积分

超级版主

积分
68585
发表于 2024-9-5 00:26:48 | 显示全部楼层 |阅读模式
三种用迭代器的方法(items,iterrows,itertuples):沿着行/列对所有元素遍历,适合对每个元素进行操作简单dolumns,loc遍历:遍历每一行/列,适合对每行/列进行求和、离散等整体操作for+zip:适合选取较少的特定行/列进行操作    之后看到其他好用方法,或者合适的拓展也会继续更新    有错误请指正,欢迎评论建议items,iterrows,itertuples:items():以 (列名,Series) 对的形式遍历DataFrame的列。    函数原型:DataFrame.iteritems(None)    返回:返回一个迭代器,产生(列名,列内容Series) 对的元组。        importpandasaspddata={'A':[1,2,3],'B':[4,5,6]}df=pd.DataFrame(data)forcolumn,seriesindf.items():print(f"Column:{column}")print(f"Series:\n{series}\n")'运行运行输出:iterrows():以 (行下标,Series) 对的形式遍历DataFrame的行。    原型:DataFrame.iterrows()    返回:返回迭代器(行号index,行内数据Series)importpandasaspddata={'A':[1,2,],'B':[4,5,]}df=pd.DataFrame(data)forindex,rowindf.iterrows():#处理每一行的逻辑print(f"row_index:{index}")print(f"eow_items\n:{row}\n")'运行运行输出: itertuples():以命名元组的方式遍历行    函数原型:DataFrame.itertuples(index=True, name='Pandas')            index:True则返回的tuple中首个元素为行号            name:字符串或者None,作为返回的tuple的名字,如果为None则返回常规tuple    返回:一个迭代器,每一行的命名元组(name,row_values)importpandasaspddata={'A':[1,2,],'B':[4,5,]}df=pd.DataFrame(data)###1.默认forrowindf.itertuple():print(row)'''输出Pandas(Index=0,A=1,B=4)Pandas(Index=1,A=2,B=5)'''#####2.不输出indexforrowindf.itertuples(index=False):print(row)'''输出Pandas(A=1,B=4)Pandas(A=2,B=5)'''#####3.输出常规tupleforrowindf.itertuples(name=None):print(row)'''输出(0,1,4)(1,2,5)''' columns+values,indexcolumns:获取dataframe的列标签    返回:(不重要,理解为列标签,获取到列名和数据类型,但无法直接进行操作)     如果想要获取列标签的数组,可以用df.columns.values,想得到list类型就加上tolist()importpandasaspddata={'A':[1,2,],'B':[4,5,],'C':[6,7]}df=pd.DataFrame(data)print('columnnamesandtype:',df.columns)'''输出:columnnamesandtype:Index(['A','B','C'],dtype='object')'''print('columnname:',df.columns.values)#数组类型。'''输出:columnname:['A''B''C']'''print('columnname:',df.columns.tolist())#等同于list(df.columns)print('columnname:',list(df))print('columnname:',list(df.columns))'''以上三种均输出columnname:['A','B','C']''''运行运行indexataFrame的索引标签    和columns类似,在这里就不赘述了。    对每行/每列进行某操作时,常用这两个方法。但是很多时候可以被df.apply(function,axis=0)替代(axis默认为0,0沿着列操作,1沿着行操作)importpandasaspddata={'A':[1,2,],'B':[4,5,],'C':[6,7]}df=pd.DataFrame(data)#使用columns遍历DataFrame的列名print("columns:")forcolumnindf.columns:print(column)'''输出columns:ABC'''#使用index遍历DataFrame的行索引print("\nindexs:")forindexindf.index:print(index)'''输出indexs:01''''运行运行for+zip:取特定几列/行遍历这个方法很简单,运行效率高。但是只适用于对特定几行/列遍历,如果列或行较多的时候书写很繁琐,且可能因个人粗心原因出错。importpandasaspddata={'A':[1,2,],'B':[4,5,],'C':[6,7]}df=pd.DataFrame(data)#对特定几列遍历#fora,b,cinzip([df[col]forcolindf.columns])fora,binzip(df['A'],df['B']):print('a:',a,'b:',b)'''输出a:1b:4a:2b:5'''#对特定几行遍历forrow1,row2inzip(df.iloc[0],df.iloc[1]):#如果时标签索引则用df.loc['RowName']print('row1:',row1,'row2:',row2)'''输出row1:1row2:2row1:4row2:5row1:6row2:7''''运行运行
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-5 08:33 , Processed in 0.463493 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表