发布之前,我已经检查了以下方面的帮助: converting to float和 null values
据我所知,我没有任何空值。
为了检查空值,我这样做:
null_columns = df_every_page.columns[df_every_page.isnull().any()]
print(df_every_page[df_every_page.isnull().any(axis=1)][null_columns].head())
这就是回来了:
0 object
dtype: object
Empty DataFrame
Columns: []
Index: []
在寻找空值之前,我做了print(df_every_page)
以确保它不是空列。此列中有值。
有什么建议吗?
编辑#1:
我得到的确切错误消息是:
只能对带np.object_的字符串值使用.str访问器 熊猫中的dtype
我正在尝试使用表格从PDF文档中抓取所有内容。
我的数据框实际上只有1列。列名称称为“所有内容”。
编辑#2:
我正在运行的导致此错误的命令是:
df_search =
df_every_page[df_every_page.everything.str.match('(Page.*)').str.len() > 0]
我的数据框示例:
everything
0 Invoice Name
1 Test Company
2 Oliver 1200
3 Address: 123 Fake Street
4 Invoice Number 123 abc
5 Date December 15th 2017
6 account number ####### / ######
7 Page 1 out of 10
编辑#3
我的最终目标是从PDF中获取所有内容,并使用tabula
将其放入1列。
然后,我将搜索所有记录,以找到上面带有“页码”的任何行。
然后我将把这些记录放入数组中,从值中删除文本部分,然后使用页码执行代码中还没有的其他事情。
我正在使用一些正则表达式来尝试查找这些页码值,这就是错误的出处。
编辑#4:
如果我不得不猜测,我会说这与我发现的here有关:
编辑#5:
当我做print(df_every_page.dtypes)
时,我得到了:
everything object
dtype: object
编辑#6:
这很有趣。
我尝试这样做:
df_every_page = pd.read_csv('./tmp_every_page.csv', dtype=object, encoding='utf-8', header=None)
df_every_page['everything'] = df_every_page.everything.astype(str).str.len()
我收到此错误消息:
UnicodeEncodeError: 'ascii' codec can't encode character u'\xa4' in position 31: ordinal not in range(128)
即使数据类型表示对象,我还是试图将其转换为字符串。
我想知道这是否是问题所在,导致我的正则表达式无法正常工作。
编辑#7:
我正在使用的文件实际上具有“荷兰语”语言的数据。
数据中已包含欧元符号€,并已替换为¤。我99%确信这就是搞砸了。
我尝试替换该值,但是由于编码,这当然不起作用。
我需要以某种方式用欧元符号替换该字符,或者什么都不替换。
utf-8似乎不适用于字符编码。我尝试设置iso8859-9,但这也不起作用。如果我们弄清楚了,我认为那应该解决所有问题。
答案 0 :(得分:0)
进行任何操作之前,请尝试
df_every_page = df_every_page.fillna(‘’)
或者如果只有一些列是字符串
df_every_page [['col1','col2']] = df_every_page [['col1','col2']]。fillna('')
答案 1 :(得分:0)
我的最终目标是将pdf文档中的所有文本提取到熊猫数据框中的一栏中。
然后我想在整列中搜索每行中看起来像“任何内容的第1页”的单词。
我最初的解决方案是尝试使用正则表达式;但是,这是我开始遇到问题的地方。
最终我要做的是:
我所做的是使用熊猫过滤这些行。然后,我将这些行放入列表中,并用它来查找法师页码。
我将使用最大页数来告诉列表中存在多少页。出于性能原因,而不是全部使用,而是一次迭代一页,因为与一次全部格式化相比,格式化更容易。