如何使用 Numpy.vectorize 以有效的方式迭代 Pandas 数据帧?

How iterate in a efficient way over Pandas dataframe with Numpy.vectorize?

我正在尝试使用每一行作为参数函数来迭代 Pandas 数据框。我试过这个:

def vectorize_df(df, hg):
   print(hg + str(df['tweets_id']) + df['tokenized_text'])

df = pd.DataFrame.from_records(belongs_node, columns=['tweets_id','tokenized_text'])
vfunct = numpy.vectorize(vectorize_df)
vfunct(df, "#Python")

问题是当我这样做时,df 参数从 'tweets_id' 而不是 all 行中获取值。非常感谢:)

当您定义一个要向量化的函数时,那么:

  • 每一列应该是一个单独的参数,
  • 你应该调用它传递相应的列,
  • “其他”参数(不是从源数组中获取的),应该被标记 作为“排除的”参数。

另一个细节是矢量化函数不应该打印任何东西, 但它应该 return 一些值 - 处理参数的结果 当前源行。

所以你可以,例如进行如下

  1. 将函数定义为:

    def myFunct(col1, col2, hg):
        return f'{hg} / {col1} / {col2}'
    

    不要在函数名称中使用单词 vectorize。现在它是一个 “普通”功能。稍后会被矢量化。

  2. 创建矢量化函数:

    vfunct = np.vectorize(myFunct, excluded=['hg'])
    
  3. 最后调用它:

    vfunct(df.tweets_id, df.tokenized_text, '#Python')
    

我的示例数据的结果是:

array(['#Python / 101 / aaa bbb ccc ddd',
       '#Python / 102 / eee fff ggg hhh iii jjj',
       '#Python / 103 / kkk lll mmm nnn ooo ppp'], dtype='<U39')

这取决于你如何处理这个结果。你可以例如将其设置为您的新列 源数据帧。