首页 > 解决方案 > 如何将特定的 xml 元素解析为 3D numpy 数组?

问题描述

我是 Python 新手,我正在尝试将数据从一个(n)个 xml 文件导入到一个 3D numpy 数组中,这样我就可以轻松地执行 arethemetic 操作并获取它们的统计信息。

数据来自一个 8 行 12 列的 96 孔板读取器,有 64 个时间点读取/测量集,所以我希望每个数组的维度为 (12, 8, 64)。看起来原始数据被分离成带有标签“Well Name”、“Col”、“Row”和“WellID”的单个井读取,其中包含“RawData”和“TimeData”,见下文。

如何使用“Col”和“Row”数据标签将“RawData”和“TimeData”数据解析为形状为(12、8、64)的 3D 数组以正确放置它们?

下面是我要解析的 xml 代码示例。

我尝试过使用 xml.etree 以及使用 pd.read_csv 进行预处理和导入的各种方法,只是无法将我想要的数据转换为我想要的格式。

  <?xml version="1.0" encoding="ISO-8859-1"?>
<Experiment>
<PlateSections>
<PlateSection ReadTime="12:46 PM 7/29/2019" InstrumentInfo="SpectraMax M3 ROM v3.0.22 16Feb11" Name="P2_MT05620_Read1-1">
<Wavelengths>
   <Wavelength WavelengthIndex="1">
      <Wells>
            <Well Name="A1" Col="1" Row="1" WellID="1">
               <RawData>1116.365 1108.403 1109.989 1107.866 1106.232 1107.034 1103.146 1109.197 1109.691 1106.744 1106.755 1101.865 1110.082 1111.202 1109.328 1106.69 1106.806 1108.367 1110.534 1106.139 1110.176 1103.169 1102.571 1104.3 1101.626 1104.893 1102.078 1104.67 1101.033 1105.046 1101.771 1103.792 1102.662 1101.68 1109.172 1102.942 1100.621 1108.578 1100.851 1102.802 1100.255 1107.063 1100.911 1097.203 1105.701 1106.615 1100.541 1100.148 1104.633 1099.759 1099.584 1103.546 1100.118 1100.373 1103.178 1100.53 1099.806 1097.829 1100.692 1096.202 1096.854 1096.287 1095.594 1099.192</RawData>
               <TimeData>0 20 40 60 80 100 120 140 160 180 200 220 240 260 280 300 320 340 360 380 400 420 440 460 480 500 520 540 560 580 600 620 640 660 680 700 720 740 760 780 800 820 840 860 880 900 920 940 960 980 1000 1020 1040 1060 1080 1100 1120 1140 1160 1180 1200 1220 1240 1260</TimeData>
            </Well>
            <Well Name="A2" Col="2" Row="1" WellID="2">
               <RawData>1130.283 1135.462 1135.582 1131.449 1137.156 1140.615 1138.294 1137.966 1140.817 1138.331 1135.898 1139.966 1142.698 1144.408 1139.501 1138.273 1141.831 1138.151 1136.602 1137.677 1141.913 1142.446 1140.802 1139.609 1139.443 1135.386 1137.401 1138.043 1136.902 1134.59 1134.169 1134.885 1136.387 1133.535 1145.864 1133.958 1135.589 1138.269 1136.6 1131.018 1130.05 1139.853 1130.962 1136.77 1133.496 1138.735 1132.582 1135.825 1132.275 1133.676 1136.552 1133.702 1131.824 1137.047 1134.558 1134.323 1133.144 1134.508 1132.209 1131.664 1136.338 1128.921 1130.802 1133.798</RawData>
               <TimeData>0 20 40 60 80 100 120 140 160 180 200 220 240 260 280 300 320 340 360 380 400 420 440 460 480 500 520 540 560 580 600 620 640 660 680 700 720 740 760 780 800 820 840 860 880 900 920 940 960 980 1000 1020 1040 1060 1080 1100 1120 1140 1160 1180 1200 1220 1240 1260</TimeData>

我希望结果如下:

Plate1Read1 = np.array(12,8,64) 其中 x 轴 (12) 是列数,yaxis(8) 是 AG 行,z 轴 (64) 是时间点。然后我想用“RawData”填充数组

标签: xmlpython-3.x

解决方案


推荐阅读