python - 在熊猫中设置值不知道列和行是否存在,避免 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 以避免浮点数。这有不利的一面,因为我可能想要一些带有文本数据的列。在这种情况下会发生错误。
解决方案
推荐阅读
- c++ - Bazel、protobuf 3.6.1.3、-Wall 和不愉快的 gcc 9.1.1
- makefile - 如何解决此“刷新 Makefile 错误”?
- google-cloud-platform - Google Cloud Identity Platform 未启用
- php - Linux计划任务在Laravel中不起作用
- java - 线性布局点击不起作用,我做错了什么?
- java - Swagger 和内容协商配置无法协同工作
- java - JavaFX FXML 注释
- rust - Rust 不能在 trait 函数中使用 trait const
- regex - zabbix的PCRE正则表达式转换
- python-3.x - cython ctypedef 大型双数组导致 Ubuntu 18.04 上的段错误