首页 > 解决方案 > 在熊猫中设置值不知道列和行是否存在,避免 NaN

问题描述

我正在包含一对值的熊猫中构建一个浅数组(概念 - 文档)

           doc1 doc2
concept1   1     0
concept2   0     1
concept3   1     0

我解析一个 XML 文件并获取对(概念 - 文档),每次有新的对出现时,我将其添加到熊猫中。

由于进来的对可能包含也可能不包含行和/或列中已经存在的值(无论是新概念还是新列),我使用以下代码:

onp=np.arange(1,21,1).reshape(4,5)
oindex=['concept1','concept2','concept3','concept4',]
ohead=['doc1','doc2','doc3','doc5','doc6']
data=onp
mydf=pd.DataFrame(data,index=oindex, columns=ohead)
#... loop ...
mydf.loc['conceptXX','ep8']=1

它运行良好,只是数据框中的值为 1.0 而不是 1,布尔值,当添加新行和/或列时,其余值为 NaN。我怎样才能避免这种情况。添加的所有值都应该是 0 或 1。(注意:目的是还有一些列用于计算,所以我不能只将所有数据帧转换为布尔类型,例如:

mydf=mydf.astype(object)

谢谢。

ALollz 评论后的第二次编辑更多解释真正的问题。我有一个 XML 文件,它通过以下方式为我提供数据:

<names>
    <name>michael</name>
        <documents>
            <document>doc1</document>
            <document>doc2</document>
        </documents>
    </name>
    <name>mathieu</name>
        <documents>
            <document>doc1</document>
            <document>docN</document>
        </documents>
    </name>
</names>
...

我想将此数据传递给数据框以进行计算。基本上,在解析 XML 时,不同的文档中会出现一些名称:

tree = ET.parse(myinputFile)
root = tree.getroot()

我将一一添加新值到数据框中。有时添加时,数据框中已经存在名称,但必须添加新文档,反之亦然。我希望澄清一点

我正要写这个作为解决方案:

mydf.fillna(0, inplace=True)
mydf=mydf.astype(int)

将所有 NaN 值更改为 0,然后将它们转换为 int 以避免浮点数。这有不利的一面,因为我可能想要一些带有文本数据的列。在这种情况下会发生错误。

标签: pythonpandas

解决方案


推荐阅读