【问题标题】:Efficient operation on rows in python pandas.Series objectpython pandas.Series对象中行的高效操作
【发布时间】:2018-08-15 14:33:53
【问题描述】:

我想根据 pandas.Dataframe 中包含字母数字字符串的一列计算多个特征。

我想根据这些字符串中的每一个计算新值,例如字母、数字、元音和辅音字符的比率。因为我有数百个数百万个字符串,所以我想找到计算这些值的最有效方法。

目前我正在为我的pandas.DataFrame df 和列domain 计算它:

alphabet = list("abcdefghijklmnopqrstuvwxyz")
fn = lambda row: sum(row.domain.count(a) for a in alphabet) / len(row.domain)
df.assign(alphabetic_ratio=df.apply(fn, axis=1).values)

目前我对数字、元音和辅音比率采用相同的方案,但由于字符串的数量需要很长时间来计算(字母比率 6 小时以上)。

我不确定我是否在解释为什么要花这么多时间做任何明显错误的事情,或者是否可以实施任何技巧来加快计算速度。

我知道将代码转换为C 并使用cython 可能会缩短时间,但我想首先探索真正的pythonic 解决方案。如果有人能告诉我它肯定会改善时间尺度,我会尝试一下。

我尝试了其他方法来确定字符是否为字母,例如检查ord(a) 数字或`a.isalpha()',但时间相同。

【问题讨论】:

    标签: python pandas time


    【解决方案1】:

    希望这个例子有帮助:

    df = pd.DataFrame({'A': ['John', 'Michael', 'Jezus', 'Donald', 'Suzy']})
    
    df['B'] = df.A.str.count('[a-z]') / df.A.str.len()
    
    df
    #         A         B
    #0     John  0.750000
    #1  Michael  0.857143
    #2    Jezus  0.800000
    #3   Donald  0.833333
    #4     Suzy  0.750000
    

    从您的示例看来,您似乎只查看了与此示例中的 A 相同的 domain 列。

    【讨论】:

      猜你喜欢
      • 2011-12-14
      • 2019-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-22
      • 2013-03-26
      • 2016-02-13
      相关资源
      最近更新 更多