【问题标题】:How to iterate through Pandas dataframe from specified row number如何从指定的行号遍历 Pandas 数据框
【发布时间】:2023-01-28 00:38:36
【问题描述】:

我正在使用 df.iterrows() 函数遍历数据帧,但不确定如何指定要从中运行数据帧的行号。我在初始 for 循环(如下)中使用行计数器来搜索行中的 X,一旦找到 X,我需要遍历数据帧的其余部分以找到 Y,但不遍历初始行在搜索 X 时已经循环了。

我试图通过删除直到 X 的所有行来实现此目的,但这不起作用,因为它删除了我稍后在找到初始 X 和 Y 后需要的条目,并且我需要找到下一个 X 和 Y。

row_count = 0

for index, row in new_df.iterrows():
        if X in row[2]:
            row_count += 1
            # take information required from row
            
            for visit_index, visit_row in new_df.iterrows():
                if Y in visit_row[2]:
                    # take information required from row
                    
                    # append information to new dataframe
                    
                    break
        else:
            new_df.drop(index, inplace = True)  
            row_count += 1

我想做的是使用 row_count,这样当我找到 X 时,我可以从 X 所在的行开始再次遍历数据帧,我该怎么做?

【问题讨论】:

  • 什么是 X? row[2] 中存储了什么数据——这是 DataFrame 中的列表吗?
  • X 是一个字符串,row[2] 只是字符串
  • 那么你是想在一个字符串中找到一个子字符串吗?
  • 是的 X 是句子中的子串,Y 也是

标签: python pandas dataframe


【解决方案1】:

我相信你可以用一种更简单的方式来做到这一点。

使用 pandas 的 .loc 函数你可以这样做:

subset = df.loc[df["YOUR_COLUMN_NAME"].str.contains(X)]

这将返回数据框中包含“YOUR_COLUMN_NAME”列中 X 的行的子集。您尚未指定行 [2] 的名称,但使用该名称代替“YOUR_COLUMN_NAME”

例如,我的代码:

import pandas as pd

df = pd.DataFrame([[1, "Test1.1"], [2, "Test2.1"]], columns=["ID", "STR"])


x = df.loc[df["STR"].str.contains("Test1")]
print(x)

输出这个:

   ID      STR
0   1  Test1.1

从这里您可以从行中获取所需的任何信息。

【讨论】:

    【解决方案2】:

    要仅遍历某些行,请获取包含这些行的 DataFrame 的一部分,然后对其进行遍历。

    另外:请记住,嵌套的内部 for 循环将再次运行,每次都通过外部循环。如果目标是找到一个“起点”并从那里开始迭代的其余部分,那么这应该是两个独立的循环:一个找到起点,一个从那里继续 - 一次。

    因此:

    for start_index, row in new_df.iterrows():
        if X in row[2]:
            break # `start_index` is the starting point
    
    for index, row in new_df.loc[start_index:, :].iterrows():
        # process the row
    

    【讨论】:

      猜你喜欢
      • 2018-09-26
      • 2016-04-25
      • 2017-10-05
      • 1970-01-01
      • 2014-11-21
      • 2022-01-20
      • 2021-04-05
      • 1970-01-01
      • 2015-06-18
      相关资源
      最近更新 更多