如何迭代数据框中的每一行而不将每个索引应用于每一行?

时间:2015-12-04 16:40:54

标签: python loops pandas

如何在不将每个索引应用于每一行的情况下迭代数据框中的每一行?

>>> d2 = {'one' : pd.Series(['us 1','uk 2','china 3','india 4'], index=['a', 'b', 'c','d'])}
>>> df2 = pd.DataFrame(d2)
>>> df2
one
a   us 1
b   uk 2
c   china 3
d   india 4

>>> for index, row in df2.iterrows():
>>>    for line in df2['one']:
>>>        print index, line
a us 1
a uk 2
a china 3
a india 4
b us 1
b uk 2
b china 3
b india 4
c us 1
c uk 2
c china 3
c india 4
d us 1
d uk 2
d china 3
d india 4

我希望能够修改第一列中的每一行,为此,我相信我需要这一行:for line in df2['one']:

但是,正如您所看到的,当我写这一行时,在整个数据帧上索引循环,依此类推索引d。

有没有一种方法可以循环,这样我就可以修改每行所需的内容,但保持数据框的初始完整性,对于每个索引,行总数是一行?

1 个答案:

答案 0 :(得分:1)

正如Kartik所说,最佳做法是避免循环。

但这可能是这样循环的:

for line in df2['one']: 
    print line

us 1
uk 2
china 3
india 4

但是,如果您想要从one列中提取数据,那么pandas docs会描述这种分裂here

import pandas as pd

d2 = {'one' : pd.Series(['us 1','uk 2','china 3','india 4'], index=['a', 'b', 'c','d'])}
df2 = pd.DataFrame(d2)
print df2

df2['two'] = df2['one'].str.split(' ').str[0]
df2['three'] = df2['one'].str.split(' ').str[1]
print df2

#       one    two three
#a     us 1     us     1
#b     uk 2     uk     2
#c  china 3  china     3
#d  india 4  india     4