【问题标题】:Pandas Can Only use .str access with string valuesPandas 只能使用带有字符串值的 .str 访问器
【发布时间】:2018-12-22 21:45:00
【问题描述】:

在发布之前,我已检查以下内容以获得帮助: 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: []

在查找 null 值之前,我执行了print(df_every_page) 以确保它不是空列。此列中有值。

有什么建议吗?

编辑#1:

我得到的确切错误信息是这样的:

只能使用带有字符串值的 .str 访问器,它使用 np.object_ 大熊猫中的数据类型

我正在尝试使用制表符从 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 但这也不起作用。如果我们解决了这个问题,我认为应该可以解决所有问题。

【问题讨论】:

  • 你的 DataFrame 是什么样的?
  • 你在哪里尝试使用字符串访问器?你有错误吗?你的数据框是什么样的?
  • 我编辑了我的帖子来回答你的问题。
  • 发布您的数据框示例以及您尝试使用的命令
  • 完成,如果您还需要什么,请告诉我。

标签: python pandas


【解决方案1】:

我的最终目标是将 pdf 文档中的所有文本提取到 pandas 数据框中的 1 列中。

然后我想在整个列中搜索每行中看起来像“Page 1 of whatever”的词。

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

我最终做的是这样的:

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

我将使用最大页码告诉 tabula 存在多少页。出于性能原因,我不是全部使用,而是一次迭代 1 页,并且因为格式化比一次性完成它们更容易。

【讨论】:

    【解决方案2】:

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

    df_every_page = df_every_page.fillna('')

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

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

    【讨论】:

    • 谢谢!我认为这与我的数据类型有关,请参阅“edit #4”
    • 我只有 1 列,没有其他列。
    猜你喜欢
    • 2017-06-01
    • 2021-03-18
    • 1970-01-01
    • 2020-03-27
    • 2016-02-15
    • 2018-08-04
    • 1970-01-01
    • 2020-11-23
    • 1970-01-01
    相关资源
    最近更新 更多