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