Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.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 使用pandas加快数百万行的筛选过程_Python_Pandas - Fatal编程技术网

Python 使用pandas加快数百万行的筛选过程

Python 使用pandas加快数百万行的筛选过程,python,pandas,Python,Pandas,我试图使用一个建议的解决方案来回答我最近在StackOverflow上提出的一个问题:() 在下面的数据框中,我尝试只删除用户消息字符串少于五个单词或不是用英语编写的行: 用户名 用户信息 波洛普 我喜欢这幅画,它非常漂亮 阿蒂尔 无聊的 阿廷戈 这是珍贵的,我又回到了童年。 带状疮疹 我喜欢它 索伊 哎呀,说我讨厌这是一种委婉的说法 艾尤 楠 你能试试这个吗。 和将用于短路评估,并在一次迭代中检查这两个条件 将熊猫作为pd导入 从langdetect导入detect#pip安装langdete

我试图使用一个建议的解决方案来回答我最近在StackOverflow上提出的一个问题:()

在下面的数据框中,我尝试只删除用户消息字符串少于五个单词或不是用英语编写的行:

用户名 用户信息 波洛普 我喜欢这幅画,它非常漂亮 阿蒂尔 无聊的 阿廷戈 这是珍贵的,我又回到了童年。 带状疮疹 我喜欢它 索伊 哎呀,说我讨厌这是一种委婉的说法 艾尤 楠 你能试试这个吗。
将用于
短路评估
,并在一次迭代中检查这两个条件

将熊猫作为pd导入
从langdetect导入detect#pip安装langdetect
def cusom_检测(x):
尝试:
返回检测(x)='en'
除:
返回错误
df_out=df[df['user_message'].apply(lambda x:(len(x.split(“”))>=5)和cusom_detect(x))]
df_out.to_csv('output.csv'))

使用
pandarallel
@

将熊猫作为pd导入
从langdetect导入detect#pip安装langdetect
从pandarallel导入pandarallel#pip安装pandarallel
pandarallel.initialize()
def cusom_检测(x):
尝试:
返回检测(x)='en'
除:
返回错误
df_out=df[df['user_message']。并行应用(lambda x:(len(x.split('')>=5)和cusom_detect(x))]
df_out.to_csv('output.csv'))

对于sql,您需要创建一个sql数据库并插入所有数据。是的,但正如前面所说,我对sql并不熟悉。有没有比我的脚本更快的解决方案?你想加快速度吗。为什么?无需加速的事情被称为过早优化。CSV需要多长时间?CSV文件有多大?您使用SSD还是HDD?可以接受多长时间?如果您需要2天来设置SQL server,那么脚本可能会在这段时间内完成。你需要多久做一次这个任务?在我看来,这是一次性的行动。你的电脑有多少内存?如果你想处理数据,你必须学会使用SQL和数据库。1200万行不是很多数据。设置数据库服务器不应该花费2小时,更不用说2天了。数据库使用的索引可以按数量级加速查询。另一方面不管你做什么,糟糕的查询都会很慢。尝试拆分1200万行并每次检查内容将导致较大的延迟,并阻止您在字段上使用索引。仅加载1200万行进行逐行筛选将浪费所有时间加载数据而不是筛选数据如果您将文件作为流读取,在每行到达时进行处理,并且至少提取名称部分,将获得更好的性能。这样,您可以在加载数据的同时生成结果。即使您使用数据库,如果您希望能够使用索引加速查询,也必须拆分数据。谢谢您的回答。唯一的问题是,如果detect处理的字符串为空,则detect可能会抛出错误(因此,我在尝试检测语言之前执行m2=df_filtered['user_message'].str.isspace()),我只是先执行df_filtered['user_message'].str.isspace(),速度相当快。我要试试你的解决方案,你不需要<代码>(len(x.split(“”))>=5)首先检查此条件。由于对于
空格
此条件为False,因此不会计算
(len(x.split(“”))>=5)
。我正在尝试您的答案。至少现在,我的内存并不像我的脚本那样臃肿啊!我会让你知道它是否有效,但非常感谢你对我的帮助。哦,太伤心了。在那种情况下你打算怎么办?忽略?让我试着把它包起来。