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

问题描述 投票:0回答:2

我正在尝试获取现有熊猫数据框的一部分,并通过循环进行一些更新来复制该部分。基本上,对于该节的所有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”值每次迭代并附加所有结果?

python pandas dataframe append
2个回答
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)

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)
© www.soinside.com 2019 - 2024. All rights reserved.