From mailing list: Out of curiosity, is there a reason returning an izip iterator of the index + cols isn't DataFrame method? I've got the following in my toolbox now: def iziprows(df): series = [df[col] for col in df.columns] series.insert(0, df.index) return izip(*series)