在熊猫中设置值,不知道列和行是否存在,避免NaN

时间:2018-12-21 20:31:41

标签: python pandas

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

           doc1 doc2
concept1   1     0
concept2   0     1
concept3   1     0

我解析XML文件并获取对(概念-doc) 每次有新的配对时,我都会将其添加到熊猫中。

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

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以避免浮点数。 这有一个消极的一面,因为我可能想要一些文本数据列。在这种情况下会发生错误。

0 个答案:

没有答案