微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 python 中使用 tabula 阅读 PDF 时,如何删除“Nan”值?

如何解决在 python 中使用 tabula 阅读 PDF 时,如何删除“Nan”值?

我正在使用 tabula-py 在 python 中读取我的课程时间表 PDF 文件,返回值“data”有很多我似乎无法清理的“nan”值。有人可以提出解决方案吗? 我应该使用某些东西而不是 tabula-py 吗? 我附上了 PDF 图片链接。出于隐私考虑,我已从 PDF 中删除了一些信息。1

我的代码如下:

import tabula


class ClasstiMetable:
def __init__(self,filename):
    self.filename = filename

def read_data(self):
    data = tabula.read_pdf(self.filename,pages='all')
    # data1 = tabula.convert_into(self.filename,output_format="csv",output_path='file.csv')
    print(data)

我的输出如下:

[                                     Course Course Regn.  ... Unnamed: 2     Room
0                                Code Title Credit  Type  ...   GCR Code      No.
1                                     Critical and   NaN  ...        NaN      NaN
2                             1 18PDM202L Creative     0  ...         A-  wubaing
3                                  Thinking Skills   NaN  ...   ISOLATED      NaN
4                                       Management   NaN  ...        NaN      NaN
5                       2 18PDH102T Principles for     2  ...         A-      NaN
6                                        Engineers   NaN  ...   COMBINED      NaN
7   Professional Lab3 18EEC206J Analog Electronics     4  ...          B   boc5om
8                                      Generation,NaN  ...        NaN      NaN
9                     4 18EEC208T Transmission & 3   NaN  ...        NaN      NaN
10                                    distribution   NaN  ...          C  4qjaetp
11                                       Numerical   NaN  ...        NaN      NaN
12               5 18MAB202T Methods for Engineers     4  ...          D  vvbxlqp
13              6 18EEC205J Electrical Machines II     4  ...          E  drcfega
14                             7 18BTB101T Biology     2  ...          F      NaN
15                                  Electrical and   NaN  ...        NaN      NaN
16                                     Electronics   NaN  ...        NaN      NaN
17                    8 18EEC207J Measurements and     4  ...          G   koed72
18                                 Instrumentation   NaN  ...        NaN      NaN
19              9 18EEC205J Electrical Machines II     4  ...     P7-P8-  drcfega
20                                             NaN   NaN  ...        NaN      NaN
21                 10 18EEC206J Analog Electronics     4  ...     P3-P4-   boc5om
22                                  Electrical and   NaN  ...        NaN      NaN
23                                     Electronics   NaN  ...        NaN      NaN
24                       11 18EEC207J Measurements     4  ...        NaN      NaN
25                                             and   NaN  ...   P19-P20-      NaN
26                                 Instrumentation   NaN  ...        NaN      NaN
27                                        Total 23   NaN  ...        NaN      NaN

[28 rows x 8 columns]]

还有,什么是'。 . .'意思是?

解决方法

我想通了。 我意识到,问题是图书馆没有正确读取行之间的分隔,所以我设置了“lattice=True”。 这解决了我大约 50% 的问题,并意识到程序需要更高的特异性。
为 windows 下载了 Tabula 并找到了整个表格的坐标以及单独的列。在 'area=' 和 'columns=' 的构建选项下将该数据输入 tabula-py 。 我意识到使用这两个属性可能有点矫枉过正,但是在格式化为 .csv 后,我的所有数据都整齐地放在单独的列中,没有“Nan”值。 在下面附上我的代码:

    import tabula
    
    class ClassTimetable:
    def __init__(self,filename):
        self.filename = filename

    def read_data(self):
        data = tabula.read_pdf(self.filename,pages='all',area=[162.498,141.6,546.248,538.736],columns=[140.55,172.53,217.161,277.400,300.454,339.127,384.492,419.446,491.585,542.157],lattice=True)

        data1 = tabula.convert_into(self.filename,output_format="csv",columns=[140.559,172.538,lattice=True,output_path='file2.csv')
        return data

输出,如下:

[    Unnamed: 0 Course\rTitle  ...                               Slot      GCR Code
0          1.0     18PDM202L  ...  Mr. R. Prathap\rChandran (102275)  A-\rISOLATED
1          2.0     18PDH102T  ...     Mr. Nizamudeen\rAnvar (102293)  A-\rCOMBINED
2          3.0     18EEC206J  ...  Dr.T.M.Thamizh\rThentral (101436)             B
3          4.0     18EEC208T  ...          Dr.S.Vidyasagar\r(100597)             C
4          5.0     18MAB202T  ...            Dr. M. Suresh\r(101984)             D
5          6.0     18EEC205J  ...     Dr. K. M,Ravi\rEswar (102699)             E
6          7.0     18BTB101T  ...               Mr.T.Anand\r(100034)             F
7          8.0     18EEC207J  ...        Mr.S.Raghavendran\r(102704)             G
8          9.0     18EEC205J  ...     Dr. K. M,Ravi\rEswar (102699)        P7-P8-
9         10.0     18EEC206J  ...  Dr.T.M.Thamizh\rThentral (101436)        P3-P4-
10        11.0     18EEC207J  ...        Mr.S.Raghavendran\r(102704)      P19-P20-
11         NaN            23  ...                                NaN           NaN

还是不知道是什么'。 . .'意味着

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?