如何解析非结构化表状数据?

gog*_*s09 4 python parsing text machine-learning text-parsing

我有一个text file保存一些操作结果的对象。数据显示在human-readable format(如表格)中。我如何解析这些数据,以便可以形成一个数据结构,例如dictionaries使用这些数据?

下面显示了一个示例unstructured data

===============================================================
Title
===============================================================
Header     Header Header Header  Header       Header
1          2      3      4       5            6                   
---------------------------------------------------------------
1          Yes    No     6       0001 0002    True    
2          No     Yes    7       0003 0004    False    
3          Yes    No     6       0001 0001    True    
4          Yes    No     6       0001 0004    False    
4          No     No     4       0004 0004    True    
5          Yes    No     2       0001 0001    True    
6          Yes    No     1       0001 0001    False    
7          No     No     2       0004 0004    True
Run Code Online (Sandbox Code Playgroud)

上例中显示的数据不是tab-separatedcomma separated。它总是有一个header并且相应地可能/可能没有沿着column-like外观的值。

我尝试过使用基本的解析技术,例如regexconditional checks,但我需要一种更强大的方法来解析这些数据,因为上面显示的示例并不是呈现数据的唯一格式。

更新 1:除了所示的示例之外,还有很多情况,例如添加更多列、单个单元格具有多个实例(但在下一行中直观地显示,而它属于上一行)。

有没有python库可以解决这个问题?

machine learning技术可以在不解析的情况下帮助解决这个问题吗?如果是,这是什么类型的问题(分类、回归、聚类)?

===============================================================
Title
===============================================================
Header     Key_1   Header Header  Header       Header
1          Key_2   3      4       5            6                   
---------------------------------------------------------------
1          Value1  No     6       0001 0002    True
           Value2    
2          Value1  Yes    7       0003 0004    False    
           Value2
3          Value1  No     6       0001 0001    True    
           Value2
4          Value1  No     6       0001 0004    False    
           Value2  
5          Value1  No     4       0004 0004    True    
           Value2  
6          Value1  No     2       0001 0001    True    
           Value2  
7          Value1  No     1       0001 0001    False    
           Value2  
8          Value1  No     2       0004 0004    True
           Value2  
Run Code Online (Sandbox Code Playgroud)

更新 2:它可能看起来像的另一个示例,涉及具有多个实例的单个单元格(但在下一行中直观地显示,而它属于上一行)。

su7*_*u7k 5

假设您的示例是“sample.txt”。

import pandas as pd

df = pd.read_table('sample.txt', skiprows=[0, 1, 2, 3, 5], delimiter='\s\s+')

print(df)
print(df.shape)

   1    2    3  4          5      6
0  1  Yes   No  6  0001 0002   True
1  2   No  Yes  7  0003 0004  False
2  3  Yes   No  6  0001 0001   True
3  4  Yes   No  6  0001 0004  False
4  4   No   No  4  0004 0004   True
5  5  Yes   No  2  0001 0001   True
6  6  Yes   No  1  0001 0001  False
7  7   No   No  2  0004 0004   True
(8, 6)
Run Code Online (Sandbox Code Playgroud)

当然,您可以更改数据类型。请检查大量pd.read_table(). 此外,还有xlsx、csv、html、sql、json、hdf、甚至剪贴板等方法。

欢迎来到熊猫...

  • 为什么每个需要读取文件的答案都建议使用 pandas 等库?如果他只需要读取一个文件,安装和导入 pandas 就远远超出了他的实际需要。 (2认同)