相关文章推荐
绅士的创口贴  ·  震惊! ...·  1 月前    · 
被表白的橙子  ·  使用Python ...·  1 月前    · 
文武双全的拐杖  ·  Qt ...·  1 年前    · 

第17篇:Pandas-遍历DataFrame对象

DataFrame的遍历方式主要有三种

DataFrame.iterrows() 按行顺序优先,接着依次按列迭代
DataFrame.iteritems() 按列顺序优先,接着依次按行迭代
DataFrame.itertuples() 按行顺序优先,接着依次按列迭代

下图的DataFrame沿用上一篇的示例。

剧名,集數,主演,監製
"風雨晴Come Rain, Come Shine",20,石修、黃日華、苗僑偉、湯鎮業、陳秀珠,
佛山贊先生Kung Fu Master of Fat Shan,20,呂良偉、黃日華、歐陽佩珊,
飛鷹The Hawk,20,鄭少秋、趙雅芝,李鼎倫
英雄出少年The Young Heroes of Shaolin,20,石修、黃日華、苗橋偉、董瑋,邱家雄
富貴榮華Brothers Four,20,鄭少秋、陳秀珠,
突破Break Through,20,"陳百強, 翁靜晶, 毛舜筠, 莊靜而",

读者实践本示例前,请使用Pandas.read_csv()函数加载该csv文件。

df=pd.read_csv('./result.csv')

如下图所示

按行遍历

通过for迭代df.iterrows接口,idx是输出DataFrame内部的索引值,data输出每行单元格的值

for idx,data in df.iterrows():
    print("[{}]: {}".format(idx,data))

输出如下


如果我们仅输出每一行特定的列,例如索引为2的列,那么我们使用如下代码

for idx,data in df.iterrows():
    print("[{}]: {}".format(idx,data[2]))

其工作的逻辑如下所示

输出如下图

来一个有点实质意义的示例吧,例如我要将当前DataFrame中每行的第2列的所有值满足20,都改成35,但这种编程方式是不鼓励的,因为性能非常糟糕

for idx,row in df.iterrows():
    if row[1]=='20':
        row[1]='35'

如下所示,需要注意的是,当前DataFrame除了索引列外,其他列的单元格,要么是str类型,要么是NaN类型

按行优先的遍历方式,还有itertuples( )函数,它将返回一个生成器,该生成器以元组生成行值。 让我们尝试一下:

for data in df.itertuples():