从函数更改熊猫数据框的一部分

时间:2019-06-18 17:01:15

标签: python pandas

我正在尝试编写一个GUI(使用kivy),部分操作一个Dataframe。其中之一是让按钮调用函数。此函数将增加数据框中的值。但是,我无法使其正常工作。我相信这与更改传递的值的功能有关,而不是与它所来自的内存有关。这是我所学的例子:

def change(thing, new):
    thing = new

df = pd.DataFrame(
    {"a" : [1 ,3],
     "b" : [2, 4]})
print(df)
>>>    a  b
    0  1  2
    1  3  4

change(df.at[0, 'a'], 7)
print(df)
>>>    a  b
    0  1  2
    1  3  4

df.at[0, 'a'] = 7
print(df) 
>>>    a  b
    0  7  2
    1  3  4

.loc.at都会在函数外部按预期更改Dataframe。我不确定如何从函数更改它。如果有用,下面是我正在使用的一些(简化)实际代码块,希望可以阐明我的意图:

def cell(value):
    entry = TextInput(text=str(value))

    def increment_up(value, instance):
        value += 1
        entry.text = str(value)

    button_up = Button(text='up', 
                       on_release=partial(increment_up, value))

    layout_buttons.add_widget(button_up)

以上,我正在尝试创建一个具有文本字段和向上按钮的“单元格”。按下向上按钮时,它应使value递增。它像这样发挥作用my_layout.add_widget(cell(df.loc[i, 'Times']))

1 个答案:

答案 0 :(得分:0)

感谢@ cs95。与其尝试更改函数中的参数,不如更改我们作为所述参数提供给它的数据框的一部分,而是让函数更改我们通过参数指定的数据框。请原谅我的非技术性解释。

def change2(df, row, col, new):
    df.at[row, col] = new

my_df = pd.DataFrame(
    {"a" : [1 ,3],
     "b" : [2, 4]})

change2(my_df, 0, 'a', 7)
print(my_df)
>>>    a  b
    0  7  2
    1  3  4