如何在不将每个索引应用于每一行的情况下迭代数据框中的每一行?
>>> 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。
有没有一种方法可以循环,这样我就可以修改每行所需的内容,但保持数据框的初始完整性,对于每个索引,行总数是一行?
答案 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