Sta*_*cey 4 python dataframe pandas
我正在遍历数据框,并尝试为每一行的特定列添加值,但是当我打印结果数据框时,值不存在
#add two new blank columns to the dayData dataframe
dayData["myValue1"]=""
dayData["myValue2"]=""
#iterate over the dataframe
for idxDay, row in dayData.iterrows():
do something.....
#interate again through the dataframe
for idxRange, row1 in dayData.iterrows():
do something else....
calculate value1
calculate value2
#write the result for value1 and value2 to the dayData dataframe
row["myValue1"]=value1
row["myValue2"]=value2
print(dayData)
Run Code Online (Sandbox Code Playgroud)
value1 和 value 2 的值是正确的,即使我硬编码 value1 = 1 和 value2 = 2 当我打印 dayData 列 myValue1 和 myValue2 之后的列也应该更新它们不包含任何数据。
生成的 dayData 数据框应如下所示
vwap last volume ratio myLong myShort
0 301.071871 301.221525 43133218.0 1.000497 1 2
1 215.545413 213.791400 349730738.0 0.991862 3 3
Run Code Online (Sandbox Code Playgroud)
但我只是得到:
vwap last volume ratio myLong myShort
0 301.071871 301.221525 43133218.0 1.000497
1 215.545413 213.791400 349730738.0 0.991862
Run Code Online (Sandbox Code Playgroud)
不是分配给行,而是分配回带有索引的数据帧。该行是该行的副本,对它的更改不会保留在父数据框中。
代替:
row["myValue1"]=value1
row["myValue2"]=value2
Run Code Online (Sandbox Code Playgroud)
做:
dayData.loc[idxDay, "myValue1"]=value1
dayData.loc[idxDay, "myValue2"]=value2
Run Code Online (Sandbox Code Playgroud)
进一步的例子:
df = pd.DataFrame([1], ['a'], ['A'])
print df
A
a 1
for i, r in df.iterrows():
r.loc['B'] = 2
print df
A
a 1
for i, r in df.iterrows():
df.loc[i, 'B'] = 2
print df
A B
a 1 2.0
Run Code Online (Sandbox Code Playgroud)
清楚地表明分配给row不起作用。分配给数据框确实如此。
| 归档时间: |
|
| 查看次数: |
2970 次 |
| 最近记录: |