【发布时间】:2019-12-22 13:09:37
【问题描述】:
我正在尝试从 .txt 格式的日志文件中提取表。该文件是使用来自pandas 的read_csv() 加载的。
日志文件如下所示:
aaa
bbb
ccc
=====================
A B C D E F
=====================
1 2 3 4 5 6
7 8 9 1 2 3
4 5 6 7 8 9
1 2 3 4 5 6
---------------------
=====================
G H I J
=====================
1 3 4
5 6 7
---------------------
=====================
K L M N O
=====================
1 2 3
4 5 6
7 8 9
---------------------
xxx
yyy
zzz
以下是关于日志文件的一些要点:
- 文件以一些可以忽略的注释行开始和结束。
- 在上面的示例中,有三个表。
- 每个表的标题位于“======...”行之间
- 每张表的结尾都用一行“------...”表示
我现在的代码:
import pandas as pd
import itertools
df = pd.read_csv("xxx.txt", sep="\n", header=None)
# delimiters for header and end-of-table
h_dl = "=" * 21
r_dl = "-" * 21
for i in range(len(df.index)-2):
# if loop to find lines which are table headers & convert to list
if (df.iloc[i].any() == h_dl) & (df.iloc[i+2].any() == h_dl):
h = df.iloc[i+1].str.split().tolist()
h = list(itertools.chain(*h))
# while loop to find lines which are table rows & append to one list
x = 3
r = []
while True:
if df.iloc[i+x].any() == r_dl:
break
r.append(df.iloc[i+x].str.split().tolist())
x += 1
r = list(itertools.chain(*r))
# create pandas dataframe with header and rows obtained above
t = pd.DataFrame(data=r, columns=h)
此代码返回AssertionError: 14 columns passed, passed data had 15 columns。我知道这是因为对于表格行,我使用的是.str.split(),默认情况下会拆分为空格。由于有些列存在缺失值,因此表头中的元素数和表行中的元素数与第二个和 htird 表不匹配。我正在努力解决这个问题,因为每个表中表示缺失值的空白字符的数量是不同的。
我的问题是:有没有办法解释某些列中的缺失值,以便我可以得到一个 DataFrame 作为输出,其中适当的缺失值是 null 或 NaN?
【问题讨论】: