在每次迭代中更新熊猫数据框并追加到上一个

时间:2020-05-10 09:24:33

标签: python pandas dataframe append

我正在尝试获取现有熊猫数据框的一部分,并在循环中重复进行此更新。基本上,对于该节的所有273行,我想通过将“ Name1”替换为“ Name2”,“ Name3” ...“ Name5”来更新人员“ GivenName”。

data1 = data[0:273] #creating the subset
data2 = data1.copy()
df = []
for i in range(4):
    data2["GivenName"] = "Name"+str(i+2) #for all 273 rows replace name
    df.append(data2)
appended_data = pd.concat(df)

我最终得到的是一个数据帧,其中仅将最后一个值“ Name5”附加了4次,而不是“ Name2”,“ Name3” ...“ Name5”等。如何更新“ GivenName”值每次迭代并附加所有结果?

3 个答案:

答案 0 :(得分:0)

正在发生的事情是您的列表df仅获得对同一data2 DataFrame的四个引用。换句话说,列表如下所示:

[
    data2,
    data2,
    data2,
    data2
]

,然后在最后一次迭代中设置data2["GivenName"] = "Name5"。获得预期行为的最直接方法是将DataFrame副本移到for循环中:

df = []
for i in range(4):
    data2 = data1.copy()
    data2["GivenName"] = "Name"+str(i+2) #for all 273 rows replace name
    df.append(data2)

答案 1 :(得分:0)

这里有几个问题:

(1)df = []创建一个列表,而不是一个数据框。尝试df = pd.DataFrame()

(2)df.append(data2)应该为df = df.append(data2),因为追加操作不会就地进行。

data1 = data[0:273] #creating the subset
data2 = data1.copy()
df = pd.DataFrame()
for i in range(4):
    data2["GivenName"] = "Name"+str(i+2) #for all 273 rows replace name
    df = df.append(data2)
appended_data = pd.concat(df)

答案 2 :(得分:0)

或者一个内衬纸

pd.concat(data[0:273].assign(GivenName=f'Name{i+2}') for i in range(4))