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