熊猫只能对字符串值使用.str访问权限

时间:2018-07-14 20:50:03

标签: python pandas

发布之前,我已经检查了以下方面的帮助: converting to floatnull 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,但这也不起作用。如果我们弄清楚了,我认为那应该解决所有问题。

2 个答案:

答案 0 :(得分:0)

进行任何操作之前,请尝试

  

df_every_page = df_every_page.fillna(‘’)

或者如果只有一些列是字符串

  
    

df_every_page [['col1','col2']] = df_every_page [['col1','col2']]。fillna('')

  

答案 1 :(得分:0)

我的最终目标是将pdf文档中的所有文本提取到熊猫数据框中的一栏中。

然后我想在整列中搜索每行中看起来像“任何内容的第1页”的单词。

我最初的解决方案是尝试使用正则表达式;但是,这是我开始遇到问题的地方。

最终我要做的是:

我所做的是使用熊猫过滤这些行。然后,我将这些行放入列表中,并用它来查找法师页码。

我将使用最大页数来告诉列表中存在多少页。出于性能原因,而不是全部使用,而是一次迭代一页,因为与一次全部格式化相比,格式化更容易。