使用Python Pandas / ElementTree将CSV文件与XML文件合并

时间:2019-02-12 12:31:55

标签: python pandas

我希望合并两个数据文件,一个CSV和一个XML,并合并一些过滤器以删除不必要的数据。

两个数据集都引用具有唯一标识符“名称”的同一项目。

例如,在CSV文件中,它看起来像:

No  Name    X   Y   Z   L*  a*  b*  C*  h   R   G   B
1   Item 8kp395185-Standard A   9.37    8.66    5.68    35.32   9.94    13.38   16.67   53.39   75.43   52.24   31.4
2   Item 8kp395185-Standard B   6.44    6.1 6.11    29.67   7.13    1.79    7.35    14.13   48.9    38.11   35.57
3   Item 8kp395185-     3.18    2.74    2.02    18.96   10.56   7.12    12.74   33.98   27.68   15.89   7.9
4   Item 8KP373606-Standard A   9.44    8.72    5.72    35.45   9.95    13.41   16.7    53.42   75.88   52.59   31.7
5   Item 8KP373606-Standard B   6.49    6.15    6.15    29.8    7.12    1.84    7.36    14.46   49.28   38.45   35.84
6   Item 8KP373606-     2.83    2.52    1.97    17.99   8.54    5.85    10.35   34.4    23.64   14.98   8.02

我希望输出一个新的csv文件,该文件的所有列都存在于原始CSV文件中,而XML文件中只有最后一列“ Percentage”,以便每个项目的“名称”部分匹配。从上面的代码中可以看到,“名称”下有三个条目,它们的代码均为“ 8kp395185”。这些条目中有两个在其后写有“ Standard”(标准),这只是为了确保一切正常,我想要的实际条目是第三个条目。这将需要进行过滤,以便XML文件中的百分比仅写在该第三个条目旁边(名称中没有Standard的条目)。

在XML文件中,每个样本都有两个条目。一个的MinL为0,一个的MinL为30。我只希望MinL的百分比为30。

XML文件如下:

<CustomResults>
    <Operation>
        <Result>
            <Name>8KP395185</Name>
            <Region>
                <MinL>0.00</MinL>
                <MinC>0.00</MinC>
                <MidL>17.35</MidL>
                <MidC>13.64</MidC>
                <MaxL>30.00</MaxL>
                <MaxC>100.00</MaxC>
                <Percentage>98.88%</Percentage>
            </Region>
            <Region>
                <MinL>30.00</MinL>
                <MinC>0.00</MinC>
                <MidL>34.56</MidL>
                <MidC>16.50</MidC>
                <MaxL>60.00</MaxL>
                <MaxC>100.00</MaxC>
                <Percentage>1.12%</Percentage>
            </Region>
        </Result>
        <Result>
            <Name> 8KP373606</Name>
            <Region>
                <MinL>0.00</MinL>
                <MinC>0.00</MinC>
                <MidL>16.24</MidL>
                <MidC>10.90</MidC>
                <MaxL>30.00</MaxL>
                <MaxC>100.00</MaxC>
                <Percentage>99.19%</Percentage>
            </Region>
            <Region>
                <MinL>30.00</MinL>
                <MinC>0.00</MinC>
                <MidL>34.08</MidL>
                <MidC>15.57</MidC>
                <MaxL>60.00</MaxL>
                <MaxC>100.00</MaxC>
                <Percentage>0.81%</Percentage>
            </Region>
        </Result>
        <Result>
            <Name>ITEM 8KP376661</Name>
            <Region>
                <MinL>0.00</MinL>
                <MinC>0.00</MinC>
                <MidL>16.24</MidL>
                <MidC>10.90</MidC>
                <MaxL>30.00</MaxL>
                <MaxC>100.00</MaxC>
                <Percentage>99.19%</Percentage>
            </Region>
            <Region>
                <MinL>30.00</MinL>
                <MinC>0.00</MinC>
                <MidL>34.08</MidL>
                <MidC>15.57</MidC>
                <MaxL>60.00</MaxL>
                <MaxC>100.00</MaxC>
                <Percentage>0.81%</Percentage>
            </Region>
        </Result>
        <Result>
            <Name>ITEM 8KP368206</Name>
            <Region>
                <MinL>0.00</MinL>
                <MinC>0.00</MinC>
                <MidL>16.24</MidL>
                <MidC>11.15</MidC>
                <MaxL>30.00</MaxL>
                <MaxC>100.00</MaxC>
                <Percentage>99.43%</Percentage>
            </Region>
            <Region>
                <MinL>30.00</MinL>
                <MinC>0.00</MinC>
                <MidL>33.73</MidL>
                <MidC>15.22</MidC>
                <MaxL>60.00</MaxL>
                <MaxC>100.00</MaxC>
                <Percentage>0.57%</Percentage>
            </Region>
        </Result>
        <Result>
            <Name>ITEM 8KA156325</Name>
            <Region>
                <MinL>0.00</MinL>
                <MinC>0.00</MinC>
                <MidL>15.72</MidL>
                <MidC>10.47</MidC>
                <MaxL>30.00</MaxL>
                <MaxC>100.00</MaxC>
                <Percentage>99.61%</Percentage>
            </Region>
            <Region>
                <MinL>30.00</MinL>
                <MinC>0.00</MinC>
                <MidL>33.75</MidL>
                <MidC>14.72</MidC>
                <MaxL>60.00</MaxL>
                <MaxC>100.00</MaxC>
                <Percentage>0.39%</Percentage>
            </Region>
        </Result>
        <Result>
            <Name>ITEM 8KA156325</Name>
            <Region>
                <MinL>0.00</MinL>
                <MinC>0.00</MinC>
                <MidL>15.72</MidL>
                <MidC>10.47</MidC>
                <MaxL>30.00</MaxL>
                <MaxC>100.00</MaxC>
                <Percentage>99.61%</Percentage>
            </Region>
            <Region>
                <MinL>30.00</MinL>
                <MinC>0.00</MinC>
                <MidL>33.75</MidL>
                <MidC>14.72</MidC>
                <MaxL>60.00</MaxL>
                <MaxC>100.00</MaxC>
                <Percentage>0.39%</Percentage>
            </Region>
        </Result>
        <Result>
            <Name>ITEM 8KP632263</Name>
            <Region>
                <MinL>0.00</MinL>
                <MinC>0.00</MinC>
                <MidL>15.72</MidL>
                <MidC>10.47</MidC>
                <MaxL>30.00</MaxL>
                <MaxC>100.00</MaxC>
                <Percentage>99.61%</Percentage>
            </Region>
            <Region>
                <MinL>30.00</MinL>
                <MinC>0.00</MinC>
                <MidL>33.75</MidL>
                <MidC>14.72</MidC>
                <MaxL>60.00</MaxL>
                <MaxC>100.00</MaxC>
                <Percentage>0.39%</Percentage>
            </Region>
        </Result>
        <Result>
            <Name>ITEM 8IP160338</Name>
            <Region>
                <MinL>0.00</MinL>
                <MinC>0.00</MinC>
                <MidL>17.26</MidL>
                <MidC>10.74</MidC>
                <MaxL>30.00</MaxL>
                <MaxC>100.00</MaxC>
                <Percentage>98.70%</Percentage>
            </Region>
            <Region>
                <MinL>30.00</MinL>
                <MinC>0.00</MinC>
                <MidL>33.18</MidL>
                <MidC>11.88</MidC>
                <MaxL>60.00</MaxL>
                <MaxC>100.00</MaxC>
                <Percentage>1.30%</Percentage>
            </Region>
        </Result>
        <Result>
            <Name>ITEM 8KP464202</Name>
            <Region>
                <MinL>0.00</MinL>
                <MinC>0.00</MinC>
                <MidL>17.26</MidL>
                <MidC>10.74</MidC>
                <MaxL>30.00</MaxL>
                <MaxC>100.00</MaxC>
                <Percentage>98.70%</Percentage>
            </Region>
            <Region>
                <MinL>30.00</MinL>
                <MinC>0.00</MinC>
                <MidL>33.18</MidL>
                <MidC>11.88</MidC>
                <MaxL>60.00</MaxL>
                <MaxC>100.00</MaxC>
                <Percentage>1.30%</Percentage>
            </Region>
        </Result>
        <Result>
            <Name>ITEM 8KA152000</Name>
            <Region>
                <MinL>0.00</MinL>
                <MinC>0.00</MinC>
                <MidL>17.26</MidL>
                <MidC>10.74</MidC>
                <MaxL>30.00</MaxL>
                <MaxC>100.00</MaxC>
                <Percentage>98.70%</Percentage>
            </Region>
            <Region>
                <MinL>30.00</MinL>
                <MinC>0.00</MinC>
                <MidL>33.18</MidL>
                <MidC>11.88</MidC>
                <MaxL>60.00</MaxL>
                <MaxC>100.00</MaxC>
                <Percentage>1.30%</Percentage>
            </Region>
        </Result>
        <Result>
            <Name>ITEM 8KA158546</Name>
            <Region>
                <MinL>0.00</MinL>
                <MinC>0.00</MinC>
                <MidL>17.26</MidL>
                <MidC>10.74</MidC>
                <MaxL>30.00</MaxL>
                <MaxC>100.00</MaxC>
                <Percentage>98.70%</Percentage>
            </Region>
            <Region>
                <MinL>30.00</MinL>
                <MinC>0.00</MinC>
                <MidL>33.18</MidL>
                <MidC>11.88</MidC>
                <MaxL>60.00</MaxL>
                <MaxC>100.00</MaxC>
                <Percentage>1.30%</Percentage>
            </Region>
        </Result>
        <Result>
            <Name>ITEM 8KA154321</Name>
            <Region>
                <MinL>0.00</MinL>
                <MinC>0.00</MinC>
                <MidL>17.26</MidL>
                <MidC>10.74</MidC>
                <MaxL>30.00</MaxL>
                <MaxC>100.00</MaxC>
                <Percentage>98.70%</Percentage>
            </Region>
            <Region>
                <MinL>30.00</MinL>
                <MinC>0.00</MinC>
                <MidL>33.18</MidL>
                <MidC>11.88</MidC>
                <MaxL>60.00</MaxL>
                <MaxC>100.00</MaxC>
                <Percentage>1.30%</Percentage>
            </Region>
        </Result>
        <Result>
            <Name>ITEM 8KA158545</Name>
            <Region>
                <MinL>0.00</MinL>
                <MinC>0.00</MinC>
                <MidL>17.26</MidL>
                <MidC>10.74</MidC>
                <MaxL>30.00</MaxL>
                <MaxC>100.00</MaxC>
                <Percentage>98.70%</Percentage>
            </Region>
            <Region>
                <MinL>30.00</MinL>
                <MinC>0.00</MinC>
                <MidL>33.18</MidL>
                <MidC>11.88</MidC>
                <MaxL>60.00</MaxL>
                <MaxC>100.00</MaxC>
                <Percentage>1.30%</Percentage>
            </Region>
        </Result>
        <Result>
            <Name>ITEM 8KA154481</Name>
            <Region>
                <MinL>0.00</MinL>
                <MinC>0.00</MinC>
                <MidL>17.26</MidL>
                <MidC>10.74</MidC>
                <MaxL>30.00</MaxL>
                <MaxC>100.00</MaxC>
                <Percentage>98.70%</Percentage>
            </Region>
            <Region>
                <MinL>30.00</MinL>
                <MinC>0.00</MinC>
                <MidL>33.18</MidL>
                <MidC>11.88</MidC>
                <MaxL>60.00</MaxL>
                <MaxC>100.00</MaxC>
                <Percentage>1.30%</Percentage>
            </Region>
        </Result>
        <Result>
            <Name>ITEM 8KA152008</Name>
            <Region>
                <MinL>0.00</MinL>
                <MinC>0.00</MinC>
                <MidL>17.26</MidL>
                <MidC>10.74</MidC>
                <MaxL>30.00</MaxL>
                <MaxC>100.00</MaxC>
                <Percentage>98.70%</Percentage>
            </Region>
            <Region>
                <MinL>30.00</MinL>
                <MinC>0.00</MinC>
                <MidL>33.18</MidL>
                <MidC>11.88</MidC>
                <MaxL>60.00</MaxL>
                <MaxC>100.00</MaxC>
                <Percentage>1.30%</Percentage>
            </Region>
        </Result>
        <Result>
            <Name>ITEM 8KA151998</Name>
            <Region>
                <MinL>0.00</MinL>
                <MinC>0.00</MinC>
                <MidL>17.26</MidL>
                <MidC>10.74</MidC>
                <MaxL>30.00</MaxL>
                <MaxC>100.00</MaxC>
                <Percentage>98.70%</Percentage>
            </Region>
            <Region>
                <MinL>30.00</MinL>
                <MinC>0.00</MinC>
                <MidL>33.18</MidL>
                <MidC>11.88</MidC>
                <MaxL>60.00</MaxL>
                <MaxC>100.00</MaxC>
                <Percentage>1.30%</Percentage>
            </Region>
        </Result>
        <Result>
            <Name>ITEM 8KP638735</Name>
            <Region>
                <MinL>0.00</MinL>
                <MinC>0.00</MinC>
                <MidL>15.62</MidL>
                <MidC>10.82</MidC>
                <MaxL>30.00</MaxL>
                <MaxC>100.00</MaxC>
                <Percentage>99.27%</Percentage>
            </Region>
            <Region>
                <MinL>30.00</MinL>
                <MinC>0.00</MinC>
                <MidL>33.47</MidL>
                <MidC>15.59</MidC>
                <MaxL>60.00</MaxL>
                <MaxC>100.00</MaxC>
                <Percentage>0.73%</Percentage>
            </Region>
        </Result>
    </Operation>
</CustomResults>

所以我认为这个问题涉及: 包含CSV 1)导入熊猫(以使用数据框) 2)读取CSV 包含XML 3)导入ElementTree(将XML文件转换为Dataframe) 4)解析XML文件 5)使用循环函数为XML文件的每次迭代获取“名称”和“百分比”,以创建一个数据框,但过滤掉MinL = 0。

合并文件 6)使用名称作为唯一标识符组合数据集,并在CSV条目中过滤出“标准”。这需要使用部分匹配来完成,因为就大小写匹配而言,并非所有名称都完全相同。但是诸如8kp638735之类的代码将完全匹配,但可能之前已编写了Item或ITEM等。

我是编码和Python的初学者,但是已经尝试并成功读取了CSV文件,但到目前为止还没有列出XML文件的内容。

CSV文件:

    import pandas as pd
    import numpy as np
    data = pd.read_csv("Test_Data.csv")
    display(data)

XML文件:

import xml.etree.ElementTree as ET
tree = ET.parse('020219.xml')
root = tree.getroot()

dfcols = ['Name', 'Percentage']
df = pd.DataFrame(columns=dfcols)

for i in tree.iter(tag='Result'):
    df = df.append(
        pd.Series([i.get('Name'), i.get('Perentage')], index=dfcols),
        ignore_index=True)
    df.head() 

CSV文件:

No  Name    X   Y   Z   L*  a*  b*  C*  h   R   G   B   
0   1   Item 8kp395185-Standard A   9.37    8.66    5.68    35.32   9.94    13.38   16.67   53.39   75.43   52.24   31.4
1   2   Item 8kp395185-Standard B   6.44    6.1 6.11    29.67   7.13    1.79    7.35    14.13   48.9    38.11   35.57
2   3   Item 8kp395185- 3.18    2.74    2.02    18.96   10.56   7.12    12.74   33.98   27.68   15.89   7.9
3   4   Item 8KP373606-Standard A   9.44    8.72    5.72    35.45   9.95    13.41   16.7    53.42   75.88   52.59   31.7
4   5   Item 8KP373606-Standard B   6.49    6.15    6.15    29.8    7.12    1.84    7.36    14.46   49.28   38.45   35.84
5   6   Item 8KP373606- 2.83    2.52    1.97    17.99   8.54    5.85    10.35   34.4    23.64   14.98   8.02
6   7   Item 8KP376661-Standard A   9.46    8.76    5.69    35.52   9.81    13.7    16.85   54.39   76.08   52.91   31.4
7   8   Item 8KP376661-Standard B   6.54    6.21    6.15    29.95   7   2.09    7.3 16.63   49.66   38.9    35.79
8   9   Item 8KP376661- 2.78    2.47    1.92    17.77   8.6 5.92    10.44   34.55   23.26   14.65   7.67
9   10  Item 8kp368206-Standard A   9.41    8.7 5.71    35.4    9.96    13.41   16.7    53.41   75.72   52.46   31.57
10  11  Item 8kp368206-Standard B   6.46    6.13    6.12    29.74   7.12    1.85    7.36    14.56   49.1    38.3    35.66
11  12  Item 8kp368206- 2.84    2.51    1.97    17.98   8.85    5.85    10.61   33.47   23.89   14.87   8.01
12  13  Item 8kp464207-Standard A   9.41    8.7 5.69    35.4    9.93    13.47   16.73   53.59   75.72   52.48   31.48
13  14  Item 8kp464207-Standard B   6.46    6.13    6.12    29.75   7.09    1.88    7.33    14.88   49.11   38.34   35.63
14  15  Item 8kp464207- 2.78    2.45    1.91    17.68   9.02    5.89    10.77   33.13   23.47   14.41   7.63
15  16  Item 8KA156325-Standard A   9.32    8.61    5.64    35.23   9.96    13.4    16.69   53.38   75.16   51.98   31.14
16  17  Item 8KA156325-Standard B   6.4 6.07    6.07    29.58   7.12    1.82    7.35    14.34   48.66   37.9    35.31
17  18  Item 8KA156325- 2.65    2.34    1.89    17.2    8.56    5.19    10.01   31.22   22.1    13.82   7.85
18  19  Item 8KP632263-Standard A   2.65    8.65    5.67    35.3    9.98    13.4    16.7    53.33   75.44   52.19   31.35
19  20  Item 8KP632263-Standard B   6.43    6.1 6.09    29.66   7.11    1.85    7.35    14.56   48.88   38.11   35.47
20  21  Item 8KP632263- 2.73    2.44    1.95    17.66   8.08    5.49    9.77    34.22   22.55   14.61   8.01
21  22  Item 8IP160338-Standard A   9.29    8.58    5.62    35.16   9.98    13.38   16.69   53.29   74.98   51.8    31.02
22  23  Item 8IP160338-Standard B   6.38    6.05    6.05    29.54   7.11    1.82    7.34    14.36   48.52   37.81   35.21
23  24  Item 8IP160338- 3.15    2.82    2.26    19.31   8.5 5.61    10.18   33.42   26.21   16.95   9.97
24  25  Item 8KP464202-Standard A   9.31    8.6 5.64    35.21   9.97    13.38   16.68   53.31   75.13   51.94   31.14
25  26  Item 8KP464202-Standard B   6.4 6.06    6.06    29.57   7.13    1.82    7.35    14.31   48.63   37.87   35.29
26  27  Item 8KP464202- 2.74    2.42    1.88    17.53   8.98    5.91    10.75   33.34   23.15   14.21   7.43
27  28  Item 8KA152000-Standard A   9.33    8.62    5.65    35.25   9.98    13.39   16.7    53.31   75.26   52.03   31.21
28  29  Item 8KA152000-Standard B   6.41    6.07    6.08    29.6    7.13    1.82    7.35    14.3    48.72   37.95   35.37
29  30  Item 8KA152000- 2.78    2.51    2.02    17.98   7.69    5.38    9.38    34.99   22.8    15.18   8.52
30  31  Item 8KA158546-Standard A   9.33    8.63    5.65    35.25   9.96    13.4    16.69   53.38   75.26   52.06   31.22
31  32  Item 8KA158546-Standard B   6.4 6.07    6.07    29.59   7.12    1.82    7.35    14.34   48.69   37.93   35.34
32  33  Item 8KA158546- 2.48    2.33    2.06    17.12   5.6 3.56    6.63    32.43   19.29   14.38   9.64
33  34  ITEM 8KA154321-Standard A   9.35    8.63    5.66    35.27   9.99    13.38   16.7    53.24   75.33   52.07   31.29
34  35  ITEM 8KA154321-Standard B   6.41    6.08    6.08    29.61   7.14    1.81    7.36    14.24   48.75   37.97   35.4
35  36  ITEM 8KA154321- 2.75    2.46    2   17.75   8.2 5.16    9.69    32.15   22.8    14.68   8.51
36  37  ITEM 8KA158545-Standard A   9.39    8.69    5.67    35.38   9.91    13.54   16.78   53.82   75.66   52.45   31.3
37  38  ITEM 8KA158545-Standard B   6.48    6.15    6.12    29.78   7.05    1.94    7.32    15.38   49.19   38.45   35.62
38  39  ITEM 8KA158545- 2.51    2.37    2.1 17.3    5.39    3.51    6.43    33.05   19.43   14.69   9.93
39  40  ITEM 8KA154481-Standard A   9.35    8.64    5.67    35.29   9.95    13.39   16.68   53.36   75.36   52.16   31.33
40  41  ITEM 8KA154481-Standard B   6.42    6.08    6.08    29.62   7.13    1.82    7.36    14.31   48.78   38  35.41
41  42  ITEM 8KA154481- 2.52    2.35    2.02    17.23   6.08    4.09    7.32    33.93   19.91   14.43   9.13
42  43  ITEM 8KA154268-Standard A   9.35    8.64    5.67    35.28   9.98    13.37   16.68   53.26   75.35   52.12   31.34
43  44  ITEM 8KA154268-Standard B   6.42    6.08    6.08    29.62   7.13    1.82    7.36    14.33   48.78   38  35.41
44  45  ITEM 8KA154268- 2.92    2.64    2.05    18.56   7.72    6.12    9.86    38.42   24.01   16.06   8.34
45  46  ITEM 8KA152008-Standard A   9.42    8.72    5.69    35.43   9.9 13.54   16.77   53.84   75.82   52.59   31.43
46  47  ITEM 8KA152008-Standard B   6.49    6.16    6.14    29.82   7.07    1.94    7.33    15.35   49.31   38.54   35.72
47  48  ITEM 8KA152008- 2.76    2.53    2.05    18.04   7.07    5.17    8.76    36.2    22.32   15.41   8.81
48  49  ITEM 8KA151998-Standard A   9.4 8.69    5.68    35.39   9.92    13.53   16.77   53.75   75.7    52.47   31.36
49  50  ITEM 8KA151998-Standard B   6.48    6.15    6.13    29.79   7.08    1.93    7.34    15.27   49.24   38.45   35.65
50  51  ITEM 8KA151998- 2.91    2.63    2.05    18.48   8.01    5.96    9.98    36.65   24.1    15.85   8.45
51  52  ITEM 8KA151998-Standard A   9.36    8.65    5.67    35.3    9.96    13.4    16.7    53.36   75.43   52.2    31.35
52  53  ITEM 8KA151998-Standard B   6.43    6.1 6.1 29.66   7.13    1.82    7.36    14.33   48.89   38.09   35.51
53  54  ITEM 8KA151998- 2.92    2.62    2.06    18.47   8.1 5.9 10.02   36.09   24.16   15.81   8.51
54  55  ITEM 8KP638735-Standard A   9.31    8.6 5.65    35.21   9.98    13.34   16.66   53.22   75.12   51.93   31.2
55  56  ITEM 8KP638735-Standard B   6.38    6.05    6.06    29.54   7.12    1.79    7.34    14.09   48.54   37.81   35.28
56  57  ITEM 8KP638735- 2.72    2.41    1.86    17.49   8.77    5.94    10.59   34.13   22.87   14.2    7.33

这如预期的那样出来。

XML输出:

    Name Percentage
0   None       None
1   None       None
2   None       None
3   None       None
4   None       None
5   None       None
6   None       None
7   None       None
8   None       None
9   None       None
10  None       None
11  None       None
12  None       None
13  None       None
14  None       None
15  None       None
16  None       None
17  None       None

这将为条目返回None,而不是数据。另外,我还没有包括任何过滤器来删除MinL = 0的条目,但是一旦返回数据列表,我就可以查看过滤了。

0 个答案:

没有答案