我有一个txt文件,该文件是另一个建模程序的输出,其中它一次查看一个建模节点的参数。数据输出类似于以下内容。我的问题是数据以单个列的形式出现,并偶尔被新的标题破坏,然后该列的第一部分重复(时间),但是第二部分是新的。我想做两件事:
1)将数据分为节点的时间和数据两列。然后将节点标签添加为第一列。
2)稍后,该节点还有另一个参数,而不是紧随其后的是信息形式为数据2节点(XX,XX)的形式,该参数与上一个相同。
这将给我最后四列,第一列是重复的节点ID,第二列是时间,第三列是数据参数1,第四列是匹配的数据参数2。
我在下面提供了数据的一小部分示例,但是输出几乎超过了1,000,000行,因此使用pandas或其他python功能来操纵数据会很好。
感谢您的帮助!
Name 20 vs 2
----------------------------------
time Data 1 Node( 72, 23)
--------------------- ---------------------
4.1203924E-003 -3.6406431E-005
1.4085015E-002 -5.8257871E-004
2.4049638E-002 6.8743013E-004
3.4014260E-002 8.2296302E-005
4.3978883E-002 -1.2276627E-004
5.3943505E-002 1.9813024E-004
....
Name 20 vs 2
----------------------------------
time Data 1 Node( 72, 24)
--------------------- ---------------------
4.1203924E-003 -3.6406431E-005
1.4085015E-002 -5.8257871E-004
2.4049638E-002 6.8743013E-004
3.4014260E-002 8.2296302E-005
4.3978883E-002 -1.2276627E-004
5.3943505E-002 1.9813024E-004
因此,经过大量的谷歌搜索后,我设法将其拼凑在一起。我正在查看的数据是空格分隔的,所以我在熊猫中使用了固定文件宽度读取方法,然后查看了列表中一些已知元素的索引,并使用它们将数据分解为两个数据帧,我可以合并后处理。我删除了这些行和NaN值,因为它们对我而言并不重要。随后,乐趣开始于实际使用数据。
import pandas
widths = [28, 27 ]
df = pd.read_fwf(filename, widths=widths, names=["Times", "Items"])
data = df["Items"].astype(str)
index1 = data.str.contains('Data 1').idxmax()
index2 = data.str.contains('Data 2').idxmax()
df2 = pd.read_fwf(filename, widths=widths, skiprows=index1, skipfooter = (len(df)-index2), header = None, names=["Times", "Prin. Stress 1"])
df2 = pd.read_fwf(filename, widths=widths, skiprows=index2, header = None, names=["Times", "Prin. Stress 2"])
df2["Prin. Stress 2"] = df3["Prin. Stress 2"]
df2 = df2[~df2["Times"].str.contains("---")] # removes lines ----
df2.dropna(inplace = True)