Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何计算每条记录中的字数,并在最佳时间内将其存储在字数和关键字级别?_Python_Pandas_Performance - Fatal编程技术网

Python 如何计算每条记录中的字数,并在最佳时间内将其存储在字数和关键字级别?

Python 如何计算每条记录中的字数,并在最佳时间内将其存储在字数和关键字级别?,python,pandas,performance,Python,Pandas,Performance,我有一个文本字段,我必须清除它,删除,停止单词,计算每个单词的出现次数,并将其存储在一个新的数据框中,其中谷物是单词和行的关键字。 从上面的数据框中,我需要为每个单词和行_键创建一个记录 现在我正在使用 def function(df): global f_target_table global row_key global column_name for word in df.words: f_target_table.loc[row_key] = pd.Series({'row_k

我有一个文本字段,我必须清除它,删除,停止单词,计算每个单词的出现次数,并将其存储在一个新的数据框中,其中谷物是单词和行的关键字。 从上面的数据框中,我需要为每个单词和行_键创建一个记录 现在我正在使用

def function(df):
global f_target_table
global row_key
global column_name
for word in df.words:
    f_target_table.loc[row_key] =  pd.Series({'row_key':row_key,'column_name':column_name,'source_id':df.source_id,'table_row_key':df.row_key,'keyword':word,'occurrence':df['cleaned_words'][word],'etl_run_number':df.etl_run_number,'soft_deleted_flag':df.soft_deleted_flag,'table_name':'abc'})
    row_key += 1
df_main.swifter.allow_dask_on_strings().apply(function,axis = 1)
我当前的逻辑是^2。我想降低代码段的时间复杂性
所需的输出不确定是否有帮助,但是,您是否尝试过类似的方法

作为pd进口熊猫 从收款进口柜台 从字符串导入标点符号 def strip_标点符号: return.joinc表示s中的c,如果c不在标点符号中 df=pd.DataFrame{text:[苹果,梨,桃,苹果。, 汽车、公共汽车、火车、飞机。], 行_键:[4,5]} df[words]=df[text].mapstrip\u标点符号\ 下大街\ 斯普利特街 def funx: s=pd.SeriesCounterx[字] s=s.reset_indexname=事件\ .renamecolumns={index:keyword} s[表\u行\u键]=x[行\u键] 返回s out=df.applyfun,轴=1 out=pd.concatout.values,忽略索引=True 更新

解释 fun函数有一行作为输入。因此,对于df中的每一行,fun都由类似于x=df.iloc[0]的内容提供。在这种情况下

x[words]是['apple','pear','peach','apple']。 Counterx[words]返回计数器{'apple':2,'pear':1,'peach':1},它基本上是一个dict s=pd.serieCounterx[words]返回一个序列,其中键作为索引,值作为值 苹果2 梨1 桃子1 数据类型:int64 要将s转换为数据帧,我们应该重置_索引。因此,s.reset_指数回报率 索引0 0苹果2 1梨1 2桃1 在这里,我们希望将索引重命名为关键字,将0重命名为引用,以便执行以下命令 s=s.reset\u索引\ .renamecolumns={index:keyword, 0:出现次数} 或者,或者

s=s.reset_indexname=事件\ .renamecolumns={index:keyword} 最后,您希望将row_键添加到此系列中 s[表\u行\u键]=x[行\u键] 当你在apply中使用fun时,你会得到一个非常难看的系列

out=df.applyfun,轴=1 0关键字出现表\u行\u键 0苹果。。。 1关键字出现表\行\键 0汽车。。。 数据类型:对象 实际上,每个值都是一个pd.DataFrame。将这些值关联起来,您将获得所需的输出

额外的 我知道你知道dask,如果你想使用它,代码基本上是一样的

这是您正在读取的文件 df=pd.DataFrame{text:[苹果,梨,桃,苹果。, 汽车、公共汽车、火车、飞机。], 行_键:[4,5]} df=dd。从_pandasdf开始,npartitions=2 多汁的 df[words]=df[text].mapstrip\u标点符号\ 下大街\ 斯普利特街 这里是唯一的区别 使用dask apply,您必须指定您的元数据 out=df.applyfun,axis=1,meta=pd.DataFrame 您需要计算,因为dask是懒惰的 out=out.compute 如果您的数据位于多个分区中,那么使用起来会更快

out=df.map\u分区slambda x:x.applyfun,轴=1 out=out.compute
看一看nltk包和sklearn的CoutVectorizor函数。我认为这很好,你能简单地解释一下发生了什么吗?你想一步一步地完成所有事情还是仅仅为了函数的乐趣?s=pd.serieCounterx[words]s=s.reset_indexname=occurrence\.重命名Columns={index:keyword}对这个片段的解释就足够了。谢谢你的解释,这真是太棒了helpful@koushikkirugulige如果你觉得它有用,请考虑接受和/或投票赞成。