我想根据pandas.Dataframe
中包含字母数字字符串的一列来计算多个特征。
我想根据这些字符串中的每一个计算新值,例如字母、数字、元音和辅音字符的比率。因为我有 100 个数百万个字符串,所以我想找到最有效的方法来计算这些值。
目前,我正在以以下方式为我的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((",但时间是一样的。
希望这个例子有帮助:
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
列。