python - 是否可以在没有迭代的情况下在 python 中对 xml 进行数据帧?
问题描述
没有迭代的python中的数据框到xml?
输入数据框:
A B C D
aa ab ac ad
aaa abb acc add
以 XML 格式输出:
<A>aa</A>
<B>ab</B>
<C>ac</C>
<D>ad</D>
<A>aaa</A>
<B>abb</B>
<C>acc</C>
<D>add</D>
解决方案
给定数据框 x:
>>> import pandas as pd
>>> x = pd.DataFrame([['aa','ab','ac','ad'],['aaa','abb','acc','add']],columns=['A','B','C','D'])
>>> x
A B C D
0 aa ab ac ad
1 aaa abb acc add
您可以使用此功能。但是,不能保证此处使用的 pandas 和 numpy 函数内部没有循环。
>>> import numpy as np
>>> def to_xml(df):
...
... #extract columns and repeat them by number of rows
... cols = df.columns.tolist()*len(df.index)
...
... #convert df to numpy and reshape columns to one vector
... df_numpy = np.array(df)
... df_numpy = df_numpy.reshape(np.dot(*df_numpy.shape))
...
... #convert columns and numpy array to pandas and apply function that formats each row, convert to list
... listlike = pd.DataFrame([df_numpy,cols]).apply(lambda x: '<{0}>{1}</{0}>'.format(x[1],x[0])).tolist()
...
... #return list of rows joined with newline character
... return '\n'.join(listlike)
输出:
>>> print(to_xml(x))
<A>aa</A>
<B>ab</B>
<C>ac</C>
<D>ad</D>
<A>aaa</A>
<B>abb</B>
<C>acc</C>
<D>add</D>
推荐阅读
- java - 如何等待 setOutputData WorkManager
- python - 如何根据其他列的条件在数据框中创建新列?
- java - 如何在java中实现降序选择排序?
- c++ - 大写和小写字母输入的while函数
- javascript - 三.js:找到网格到鼠标光标最近的点
- prolog - Prolog:从类似图形的问题中删除圆圈
- netty - net::ERR_CERT_COMMON_NAME_INVALID 使用 netty 的 WebSocket
- kotlin - 派生类初始化顺序
- spring-restcontroller - spring REST 是否支持通过以句点 /resources/{resourceid} 开头的 resourceid 进行查找
- android - Android Management API 中的注册令牌到期