【问题标题】:pandas how to find the number of rows with the values of a column equal space熊猫如何找到列的值相等的行数
【发布时间】:2018-09-04 21:04:49
【问题描述】:

我想知道当列的值等于一个或多个空格或制表符或换行符时,如何在df 中找到行数,

df['currency'].str.findall(r'[^\s|\n|\t]+')

但上面的代码只给了我currency 列值的行索引。

【问题讨论】:

  • | in a character class [] 匹配字符的字面意思。此外,\s 包括 \n\t。解决所有这些问题后,您将得到 [^\s],这与使用 \S 相同
  • 只需使用\s+,因为您要匹配一个或多个空白字符

标签: python regex pandas dataframe


【解决方案1】:

尝试使用.str.contains,它将为每一行返回一个布尔值,然后对结果求和:

df['currency'].str.contains(r'\S+').sum()

根据@Jan 和@ctwheels 的提示更新了正则表达式——\s+ 将匹配一个或多个空白字符(\S 将匹配一个或多个非空白字符,如果您需要的话)。

【讨论】:

    【解决方案2】:

    您不需要正则表达式。一种方法是应用pd.Series.strip 并测试您的结果是否为空字符串。

    import pandas as pd
    
    s = pd.Series(['  ', '\t', ' ', 'string', '--'])
    
    res = s.str.strip().values == ''
    
    # array([ True,  True,  True, False, False], dtype=bool)
    

    计算行数:

    res = (s.str.strip().values == '').sum()
    

    【讨论】:

      【解决方案3】:

      您可能正在寻找

      df['currency'].str.contains(r'\s+').sum()
      

      您当前的方法会查找包含空格的行。
      另外,\s 已经包含了\n\t,所以这里真的不需要字符类。 + 运算符匹配一次或多次。


      对于记录,\s 相当于
      [ \t\n\r\f\v]
      

      有关详细信息,请参阅Python documentation

      【讨论】:

      • 没错,就是这么简单。
      • 这种情况下如何也能找到空字符串?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-21
      • 2020-08-14
      • 1970-01-01
      • 2020-03-18
      • 2022-01-15
      • 2019-09-29
      • 1970-01-01
      相关资源
      最近更新 更多