如何使用 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 一些值 - 处理参数的结果
当前源行。
所以你可以,例如进行如下
将函数定义为:
def myFunct(col1, col2, hg):
return f'{hg} / {col1} / {col2}'
不要在函数名称中使用单词 vectorize。现在它是一个
“普通”功能。稍后会被矢量化。
创建矢量化函数:
vfunct = np.vectorize(myFunct, excluded=['hg'])
最后调用它:
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')
这取决于你如何处理这个结果。你可以例如将其设置为您的新列
源数据帧。
我正在尝试使用每一行作为参数函数来迭代 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 一些值 - 处理参数的结果 当前源行。
所以你可以,例如进行如下
将函数定义为:
def myFunct(col1, col2, hg): return f'{hg} / {col1} / {col2}'
不要在函数名称中使用单词 vectorize。现在它是一个 “普通”功能。稍后会被矢量化。
创建矢量化函数:
vfunct = np.vectorize(myFunct, excluded=['hg'])
最后调用它:
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')
这取决于你如何处理这个结果。你可以例如将其设置为您的新列 源数据帧。