【问题标题】:Check pandas dataframe column for string type检查 pandas 数据框列的字符串类型
【发布时间】:2020-09-15 17:15:05
【问题描述】:

我有一个相当大的 pandas 数据框(11k 行和 20 列)。一列具有混合数据类型,主要是数字(浮点数),其中散布着少量字符串。

在使用混合列中的数据执行一些统计分析之前,我通过查询其他列来子集此数据帧(但如果存在字符串,则无法执行此操作)。一旦对该列进行子集化,99% 的时间都是纯数字,但很少有字符串值会出现在子集中,我需要将其捕获。

循环遍历 Pandas 混合类型列以检查字符串(或反过来检查整个列是否充满数值)的最有效/pythonic 方式是什么?

如果列中存在一个字符串,我想引发错误,否则继续。

【问题讨论】:

  • 您能简单地尝试将其转换为浮点数吗? df['col_test'].astype(float)
  • 是的,我已经在这样做并捕获类型和值错误我只是在寻找另一种方法,但我可能已经有了解决方案。例如,我想知道 pandas 是否有内置方法(尽管我在文档中找不到)
  • 另外我应该补充一点,转换会告诉我有问题,但不一定有多少字符串或其索引可能是我的下一步

标签: python string pandas


【解决方案1】:

这是一种方式。我不确定它是否可以矢量化。

import pandas as pd

df = pd.DataFrame({'A': [1, None, 'hello', True, 'world', 'mystr', 34.11]})

df['stringy'] = [isinstance(x, str) for x in df.A]

#        A stringy
# 0      1   False
# 1   None   False
# 2  hello    True
# 3   True   False
# 4  world    True
# 5  mystr    True
# 6  34.11   False

【讨论】:

    【解决方案2】:

    这是一种不同的方式。它将A 列的值转换为数字,但不会因错误而失败:字符串被替换为 NA。 notnull() 用于删除这些 NA。

    df = df[pd.to_numeric(df.A, errors='coerce').notnull()]
    

    但是,如果列中已经存在 NA,它们也会被删除。

    另请参阅: Select row from a DataFrame based on the type of the object(i.e. str)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-02
      • 1970-01-01
      • 2012-06-03
      • 2019-02-21
      • 2018-08-24
      相关资源
      最近更新 更多