我正在尝试遍历Pandas DataFrame的行和列,并在满足某些条件的情况下将其写入新的DataFrame中。我可以迭代以下具有不同名称的行和列的DataFrame。
W0O5 W1O5 W2O5 W3O5
W0O5 0.0 0.0 0.0 0.0
W1O5 0.0 0.0 1.0 0.0
W2O5 0.0 1.0 0.0 0.0
W3O5 0.0 0.0 0.0 0.0
我使用了以下方法
for i in pandas_df.index:
for j in pandas_df.columns:
print(i, j)
print(pandas_df.at[i, j])
if pandas_df.at[i, j] ==1:
single_pandas_df.at['WO5', 'WO5_corner'] =1
其中single_pandas_df是我创建的新DataFrame,我想在其上在相应的行和列处添加值。
但是,当我尝试遍历包含相同行和列标头的DataFrame时,如下所示:
WO5 WO5 WO5 WO5
WO5 0.0 0.0 0.0 0.0
WO5 0.0 0.0 1.0 0.0
WO5 0.0 1.0 0.0 0.0
WO5 0.0 0.0 0.0 0.0
我得到AttributeError说
AttributeError:'BlockManager'对象没有属性'T'
我知道错误是由于重复的列名引起的。我很好奇,有没有办法解决大熊猫这种情况。与第二种情况一样,我拥有所有的DataFrames,我需要从行和列中获取每个索引的值。
谢谢。
在Yolos评论后更新: 其实我有很多这样的DataFrames如下
DyO7 DyO7 DyO6 DyO7 DyO7 DyO6
DyO7 0.0 3.0 1.0 2.0 1.0 0.0
DyO7 3.0 0.0 0.0 1.0 0.0 1.0
DyO6 1.0 0.0 0.0 0.0 1.0 0.0
DyO7 2.0 1.0 0.0 0.0 3.0 1.0
DyO7 1.0 0.0 1.0 3.0 0.0 0.0
DyO6 0.0 1.0 0.0 1.0 0.0 0.0
下一个为
TaO6 TaO6
TaO6 0.0 1.0
TaO6 1.0 0.0
在这些数据帧中,1、2和3表示角,边和面共享。因此,如果DataFrame中的(i,j)项为1,则转到“ ...” _ corner,如果2为边缘,则为3。
我最初的single_pandas DataFrame如下所示
DyO6_corner DyO6_edge DyO6_face DyO7_corner DyO7_edge DyO7_face TaO6_corner TaO6_edge TaO6_face WO5_corner WO5_edge WO5_face
DyO6 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
DyO7 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
TaO6 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
WO5 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
根据我上面的脚本,在更新了single_pandas DataFrame之后,在('WO5','WO5_corner')处将为1,并且变为:
DyO6_corner DyO6_edge DyO6_face DyO7_corner DyO7_edge DyO7_face TaO6_corner TaO6_edge TaO6_face WO5_corner WO5_edge WO5_face
DyO6 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
DyO7 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
TaO6 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
WO5 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1 0.0 0.0