Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将数据帧转换为XML_Python_Xml_Pandas - Fatal编程技术网

Python 将数据帧转换为XML

Python 将数据帧转换为XML,python,xml,pandas,Python,Xml,Pandas,我知道以前有人问过这个问题,我的最后一个问题被搁置了,所以现在我要详细说明。 我有一个人口信息的CSV文件,我把它读给熊猫,现在必须把它转换成XML,例如这样的 阿卡 2014 17052 .. 这是我代码的阅读部分: 将熊猫作为pd导入 pop=pd.read_csv(r''directory\population.csv'',分隔符=“;”) 尝试像前面链接中提到的那样使用函数和循环执行此操作:。没有成功,可能还有其他建议吗 这是我的数据帧的一个示例: Alahärmä2014 0.1 0

我知道以前有人问过这个问题,我的最后一个问题被搁置了,所以现在我要详细说明。 我有一个人口信息的CSV文件,我把它读给熊猫,现在必须把它转换成XML,例如这样的

阿卡
2014
17052
..

这是我代码的阅读部分:
将熊猫作为pd导入
pop=pd.read_csv(r''directory\population.csv'',分隔符=“;”)

尝试像前面链接中提到的那样使用函数和循环执行此操作:。没有成功,可能还有其他建议吗

这是我的数据帧的一个示例:
Alahärmä2014 0.1 0.2
0 Alajärvi 2014 10171 5102 5069
1阿拉斯塔罗2014 0 0
2 Alavieska 2014 2687 1400 1287
3 Alavus 2014 12103 6102 6001
4 Anjalankoski 2014 0 0


对python来说是相当陌生的,因此非常感谢您的帮助。

您所链接的问题实际上对您的问题有很好的回答,但我想您在将数据转换到该解决方案时遇到了困难,因此我在下面为您做了这件事

好的,你的细节有点粗略。如果您的具体情况略有不同,那么您需要调整我的答案,但以下是一些适合我的方法:

首先,假设您有一个文本文件,如下所示:

0       Alahärmä  2014      0   0.1   0.2
1      Alajärvi  2014  10171  5102  5069
2      Alastaro  2014      0     0     0
3     Alavieska  2014   2687  1400  1287
4        Alavus  2014  12103  6102  6001
5  Anjalankoski  2014      0     0     0
继续创建python脚本,我们首先使用以下行导入该文本文件:

pop = pd.read_csv(r'directory\population.csv', delimiter=r"\s+", names=['cityname', 'year', 'total', 'male', 'females'])
这将文本文件作为dataframe引入,并为新dataframe提供正确的列标题

然后从您链接到的问题中获取数据,我们将以下内容添加到python脚本中:

def func(row):
    xml = ['<item>']
    for field in row.index:
        xml.append('  <field name="{0}">{1}</field>'.format(field, row[field]))
    xml.append('</item>')
    return '\n'.join(xml)

print('\n'.join(pop.apply(func, axis=1)))
def func(行):
xml=['']
对于row.index中的字段:
append(“{1}.”格式(字段,行[field]))
xml.append(“”)
返回'\n'。加入(xml)
打印('\n'.join(pop.apply(func,axis=1)))
现在,我们将所有这些放在一起,得到以下结果:

import pandas as pd
pop = pd.read_csv(r'directory\population.csv', delimiter=r"\s+", names=['cityname', 'year', 'total', 'male', ‘females'])

def func(row):
    xml = ['<item>']
    for field in row.index:
        xml.append('  <field name="{0}">{1}</field>'.format(field, row[field]))
    xml.append('</item>')
    return '\n'.join(xml)

print('\n'.join(pop.apply(func, axis=1)))
将熊猫作为pd导入
pop=pd.read\u csv(r'directory\population.csv',分隔符=r“\s+”,名称=['cityname','year','total','male','females']
def func(世界其他地区):
xml=['']
对于row.index中的字段:
append(“{1}.”格式(字段,行[field]))
xml.append(“”)
返回'\n'。加入(xml)
打印('\n'.join(pop.apply(func,axis=1)))
当我们运行上述文件时,我们得到以下输出:

<item>
  <field name="cityname">Alahärmä</field>
  <field name="year">2014</field>
  <field name="total">0</field>
  <field name="male">0.1</field>
  <field name="females">0.2</field>
</item>
<item>
  <field name="cityname">Alajärvi</field>
  <field name="year">2014</field>
  <field name="total">10171</field>
  <field name="male">5102.0</field>
  <field name="females">5069.0</field>
</item>
<item>
  <field name="cityname">Alastaro</field>
  <field name="year">2014</field>
  <field name="total">0</field>
  <field name="male">0.0</field>
  <field name="females">0.0</field>
</item>
<item>
  <field name="cityname">Alavieska</field>
  <field name="year">2014</field>
  <field name="total">2687</field>
  <field name="male">1400.0</field>
  <field name="females">1287.0</field>
</item>
<item>
  <field name="cityname">Alavus</field>
  <field name="year">2014</field>
  <field name="total">12103</field>
  <field name="male">6102.0</field>
  <field name="females">6001.0</field>
</item>
<item>
  <field name="cityname">Anjalankoski</field>
  <field name="year">2014</field>
  <field name="total">0</field>
  <field name="male">0.0</field>
  <field name="females">0.0</field>
</item>

阿拉哈姆
2014
0
0.1
0.2
阿拉贾维
2014
10171
5102
5069
阿拉斯塔罗
2014
0
0
0
阿拉维耶斯卡
2014
2687
1400
1287
阿拉夫斯
2014
12103
6102
6001
安贾兰科斯基
2014
0
0
0

你能给我们看一个头吗()您的数据框架如下所示:
Alahärmä2014 0 0.1 0.2 0 Alajärvi 2014 10171 5102 5069 1 Alastaro 2014 0 0 0 2 Alavieska 2014 2687 1400 1287 3 Alavus 2014 12103 6102 6001 4Anjalankoski 2014 0 0
这是否回答了您的问题?你是金子!由于括号或“在错误的位置”,我几乎没有出错。谢谢最后一个问题:如何将此输出保存到xml文件中?如果它仍然对您或某人有帮助:将lxml.etree作为ET parser=ET.XMLParser(recover=True)tree=ET.ElementTree(ET.fromstring(xml,parser=parser))tree.write(filelocation)