簡體   English   中英

將 pandas 系列字符串轉換為 numpy 頻率矩陣的有效方法

[英]efficient way to convert pandas series of strings to numpy frequency matrix

我有:

  1. 英文字符列表,a 到 z:char_list
  2. 一系列的字符串

我想創建一個 numpy 矩陣,其中每一行對應於系列中同一行的字符串,每一列對應於列表中相同索引處的字符。

例子:

series: [[ab],[ac],[aa]]
chars = [a,b,c]
result = [[110],[101],[200]]

這是我現在的做法:

def create_char_matrix(strings, symbol_list):
    
    mat = np.zeros((strings.shape[0],len(symbol_list)))
    
    for i, line in enumerate(strings):
        for c in line:
            mat[i,symbol_list.index(c)] += 1 
 
    
    return mat

這不是很快,考慮到通常有比嵌套 for 循環更好的解決方案。

關於如何加速這個過程的任何想法?

您可以將字符串拆分為字符,然后進行crosstab

s = pd.Series(['ab','ac','aa'])
chars=['a','b','c']
    
a = s.str.split('').str[1:-1].explode()
pd.crosstab(a.index, a).reindex(chars, axis=1, fill_value=0).values

Output:

array([[1, 1, 0],
       [1, 0, 1],
       [2, 0, 0]])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM