【问题标题】:How do you iterate over each row in a data frame without applying each index to every row?如何在不将每个索引应用于每一行的情况下迭代数据框中的每一行?
【发布时间】:2015-12-04 16:40:54
【问题描述】:

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

>>> 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']:

但是,正如你所看到的,当我写下这一行时,索引 a 会遍历整个数据帧,依此类推,直到索引 d。

有没有一种方法可以循环,以便我可以在每一行中修改我需要的内容,但保持数据框的初始完整性,即每个索引一行,总行数?

【问题讨论】:

  • 内联代码是通过用反引号包围来添加的(例如,`code` 将呈现为code),而缩进代码块是通过将每行缩进 4 个空格来完成的。此外,python 输入/输出的标准语法(类似于交互式会话),如果使用 >>> 进行输入。您可以点击灰色的edit 按钮查看我如何重新格式化您的文本以供将来参考。
  • 你到底想做什么?你不是在问你真正的问题是什么,你想要的是关于你解决它的方法的建议。这很糟糕,被称为XY Problem。读它,下次避免它。循环非常慢,像 Pandas 这样的包很少需要循环。您真正想要完成的事情可能无需任何循环即可完成。但是,除非您正确地提出问题,否则您将无法获得帮助。 (这就是为什么没有人回复你,即使你问了 14 个小时。)
  • 感谢 Kartik 向我解释这一点。我会发一个新帖子,里面有我的问题。
  • 这是我的新帖子。谢谢你帮助我。 link

标签: python loops pandas


【解决方案1】:

正如 Kartik 所说,最佳实践是避免循环。

但也可以这样循环:

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

us 1
uk 2
china 3
india 4

但是如果你想从列one 中提取数据,pandas 文档描述了这种拆分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

【讨论】:

  • 谢谢你,杰兹瑞尔。这是一个新的post,希望能更清楚地提出我的问题。
猜你喜欢
  • 2022-08-17
  • 1970-01-01
  • 2017-06-15
  • 2020-02-02
  • 1970-01-01
  • 2021-10-04
  • 2017-09-19
  • 2011-11-02
  • 1970-01-01
相关资源
最近更新 更多