|
三种用迭代器的方法(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''''运行运行
|
|