【问题标题】:pandas edit a cell value with itertuplespandas 使用 itertuples 编辑单元格值
【发布时间】:2017-03-25 00:35:49
【问题描述】:

我想加快我的代码速度,所以我不喜欢使用双精度: 我的代码:

    for c in range(0, n-1):
        for l in range(0,n-c-1):
            df2.ix[l,c]=C_back(l,c,df)

我想使用

for x in df.itertuples():

但我不知道如何修改特定的单元格值。 谢谢

【问题讨论】:

    标签: python loops pandas iterate


    【解决方案1】:

    使用stack

    for mytuple, value in df.stack().iteritems():
        print(mytuple, value)
    

    考虑df

    df = pd.DataFrame(np.arange(9).reshape(-1, 3), list('ABC'), list('XYZ'))
    df
    

    for mytuple, value in df.stack().iteritems():
        print(mytuple, value)
    
    ('A', 'X') 0
    ('A', 'Y') 1
    ('A', 'Z') 2
    ('B', 'X') 3
    ('B', 'Y') 4
    ('B', 'Z') 5
    ('C', 'X') 6
    ('C', 'Y') 7
    ('C', 'Z') 8
    

    设置df的值

    for (i, j), value in df.stack().iteritems():
        df.set_value(i, j, value ** 2)
    
    df
    

    【讨论】:

    • 如果我只想设置我的df的下对角线,即示例中的(5,7,8),非常感谢!
    • 更复杂,如果我想将单元格值 (B,Z) 替换为 (B,Y).value *2 和 (C,Y) 替换为 (C,X).value * 2 和 (C,Z) 通过 (C,Y).value*2.
    • set_value 不是公共 api - 是的,它们没有被弃用,但不鼓励使用
    【解决方案2】:

    使用迭代器:

            for each in dt.itertuples():
                dt.loc[each.Index, 'column'] = value
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-18
      • 2017-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-03
      • 2010-11-16
      • 1970-01-01
      相关资源
      最近更新 更多