通过逐级遍历过滤DataFrame

时间:2015-12-04 13:22:43

标签: python multithreading class pandas multiprocessing

我有以下DataFrame内容

中的csv
NAME,VENUE_CITY_NAME,EVENT_LANGUAGE,EVENT_GENRE
satya,Pune,Hindi,|COMEDY|DRAMA|
Amit,National Capital Region,English,|ACTION|ADVENTURE|SCI-FI|
satya,Mumbai,Hindi,|COMEDY|DRAMA|
atul,Bangalore,Tamil,|DRAMA|THRILLER|
atul,Pune,Others,|SPORTS|
alex,Hyderabad,Telugu,|ACTION|ROMANCE|THRILLER|
satya,Bangalore,Malayalam,|DRAMA|SUSPENSE|
dave,Hyderabad,Hindi,|COMEDY|
chris,Bangalore,Telugu,|ACTION|ROMANCE|THRILLER|
satya,Pune,Others,|SPORTS|
dave,Kanpur,Hindi,|COMEDY|DRAMA|
alex,Bangalore,Telugu,|COMEDY|ROMANCE|
amit,Bangalore,Telugu,|ACTION|ROMANCE|THRILLER|
atul,Chennai,Tamil,|COMEDY|ROMANCE|
dave,Bangalore,Telugu,|ACTION|ROMANCE|THRILLER|
alex,Pune,Others,|SPORTS|
chris,Hyderabad,Telugu,|DRAMA|ROMANCE|
satya,National Capital Region,Hindi,|ACTION|COMEDY|
dave,Pune,Others,|SPORTS|
amit,National Capital Region,Others,|SPORTS|

我必须按级别(使用多节点)过滤数据帧并使用多处理

  • LEVEL_1按城市过滤(可能位于不同根节点的多个城市)

  • LEVEL-2然后按语言过滤数据帧(多个子节点)

  • 按成例值排列的第3级过滤器

好的我承认,这可以通过逐步过程的方式过滤来完成。

但原因是我的实际数据帧大小很大,我被要求考虑内存管理(所以多处理/排队),减少处理时间,脚本应该是动态和通用的(所以类和对象)......同样有很多挑战

所以我想在第一级过滤主数据帧(因为可以有这么多城市来过滤多个节点,应该通过多处理来处理),

然后在第二级2或多个子/子节点可以根据语言过滤条件找到。所以在过滤后我需要将主数据帧放在level1。

在第3级,应该像第2级一样进行,结果数据框应该通过排队机制返回到基础。

1 个答案:

答案 0 :(得分:1)

如果文件非常大,您可能最好以块(使用.read_csv() chunksize参数)阅读它并按照IO docs中所述进行相应处理并提及{{ 3}}和here

要合并各种过滤器,您只需使用以下内容(如here from a multiprocessing perspective所述:

cities = ['city1', 'city2', ...]
languages = ['language1', 'language2',...]
genres = ['genre1', 'genre2',...]
df = df[(df.VENUE_CITY_NAME.isin(cities) & (df.EVENT_LANGUAGE.isin(languages) & (df.EVENT_GENRE.isin(genres)]

如果您需要解析特定类型的genre列,那么事情当然会略有不同,显然可能有多个值。

相关问题