Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dataframe 获取Julia数据帧中一行的索引(类似于iterrows?)_Dataframe_Indexing_Iteration_Julia - Fatal编程技术网

Dataframe 获取Julia数据帧中一行的索引(类似于iterrows?)

Dataframe 获取Julia数据帧中一行的索引(类似于iterrows?),dataframe,indexing,iteration,julia,Dataframe,Indexing,Iteration,Julia,在Julia中迭代df时,是否有任何方法可以获得行和行对象的索引?如果没有,即使是找到一行索引的方法也会很好,因为我可以简单地使用eachrow(),然后找到迭代行的索引,尽管考虑到Julia中不支持命名df的索引,我想这不太可能 对于上下文,我需要索引,以便在df的每一列中找到第一个出现的0,以便用另一个值(比如99)替换它。为此,我希望遍历df中每列的所有行。e、 g.对于df=DataFrame(a=[1,0,2],b=[0,1,0],c=[0,0,4]),代码: for col_inde

在Julia中迭代df时,是否有任何方法可以获得行和行对象的索引?如果没有,即使是找到一行索引的方法也会很好,因为我可以简单地使用
eachrow()
,然后找到迭代行的索引,尽管考虑到Julia中不支持命名df的索引,我想这不太可能

对于上下文,我需要索引,以便在df的每一列中找到第一个出现的0,以便用另一个值(比如99)替换它。为此,我希望遍历df中每列的所有行。e、 g.对于df=DataFrame(a=[1,0,2],b=[0,1,0],c=[0,0,4]),代码:

for col_index in ["a", "b", "c"]
    for row in eachrow(select(df, :i))
        if row[1] == 0
            df[row.index, :i] = 99
            break
        end
    end
end
会把df变成

1 99 99
99 1 0 
2 0 4

抱歉,如果这是一个愚蠢的问题,尽管我在网上找不到任何对我的目标有影响的东西。

你可以通过使用
enumerate(eachrow(df))
h/t@Antonello获得足够好的东西

根据我在问题中编写的玩具代码,这看起来像:

for col_index in ["a", "b", "c"]
    for (row_index, row) in enumerate(eachrow(select(df, :col_index)))
        if row[1] == 0
            df[row_index, :col_index] = 99
            break
        end
    end
end
  • 您可以使用
    rownumber
    函数获取从中获取
    DataFrameRow
    的数据帧中的行号
  • 由于
    DataFrameRow
    是可变的,因此您可以编写循环,如下所示:
  • 最后,这样做会更快:

  • 未经测试,但enumerate不能与
    一起工作。我不知道enumerate与julia一起工作。。。谢谢省去了我手工写计数器的麻烦,哈哈。
    
    for col_index in ["a", "b", "c"]
        for row in eachrow(df)
            if row[col_index] == 0
                row[col_index] = 99
                break
            end
        end
    end
    
    for col_index in ["a", "b", "c"]
        col = df[!, col_index]
        loc = findfirst(==(0), col)
        isnothing(loc) || (col[loc] = 99)
    end