【问题标题】:Python: Parse table with missing tab at endPython:解析表末尾缺少选项卡
【发布时间】:2019-01-08 06:38:55
【问题描述】:

有没有办法使用 pandas 读取表或读取 fwf 来解析具有空字段的文本文件,如果该行中没有更多字段,则制表符分隔符将停止。示例:我添加了可读的空格,但它们不在选项卡之间。应该有 5 列 A:E

A \t B \t C \t D \t E            \r\n
word 1 \t 1 \t 2  \t text  \t s  \r\n
       \t 0 \t 20                \r\n
word 2 \t 1 \t 5                 \r\n
       \t   \t    \t text2       \r\n
word 6 \t 2 \t 6  \t text3 \t s  \r\n

我想要 NaN 值或任何在有空字段的地方说它是空的。我环顾四周寻找类似的东西,但没有找到任何东西。我也尝试了所有我能想到的使用 pandas 的方法。我曾考虑为缺少 4 的每一行添加 \t 值,但我希望有一种更简单的方法,因为除了这个之外,这个数据集还有更多问题。这些数据表中间用文字隔开,因为是pdf转成文字的。

预期结果:

   A      B    C     D      E
word 1    1    2    text    s
  NaN     0    20   NaN    NaN
word 2    1    5    NaN    NaN
  NaN    NaN  NaN  text2   NaN
word 6    2    6   text3    s

使用

data = pd.read_fwf(filename, skiprows=range(0,10),skipfooter=8,sep='\t',na_values='NaN')

【问题讨论】:

  • 你试过什么?你能添加一个预期的结果吗?
  • 我已经尝试使用 read_table 和 read_fwf 与许多不同的参数一起查看在线。似乎没有任何效果。所有内容都作为字符串放入第一列。它不解析选项卡。我认为那是因为他们的标签数量不一致
  • 还添加 delim_whitespace=True 将选项卡保留在第一列内,但不会将它们分开。

标签: python python-3.x pandas python-2.7


【解决方案1】:

嗯,从您的示例中过滤掉空格后,它得到:

'A\tB\tC\tD\tE\r\nword 1\t1\t2\ttext\ts\r\n\t0\t20\r\nword 2\t1\t5\r\n\t\t\ttext2\r\nword 6\t2\t6\ttext3\ts\r\n'

显示为(每个第 8 个位置的制表符转换为空格):

A       B       C       D       E
word 1  1       2       text    s
        0       20
word 2  1       5
                        text2
word 6  2       6       text3   s

Pandas 0.23.4 可以顺利读取(na_values='' 要求将空字段转换为NaN):

data = pandas.read_csv(file, sep='\t', na_values='')
print(data)

按预期给出:

        A    B     C      D    E
0  word 1  1.0   2.0   text    s
1     NaN  0.0  20.0    NaN  NaN
2  word 2  1.0   5.0    NaN  NaN
3     NaN  NaN   NaN  text2  NaN
4  word 6  2.0   6.0  text3    s

【讨论】:

    猜你喜欢
    • 2017-06-11
    • 1970-01-01
    • 2019-07-05
    • 2013-04-27
    • 2013-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多