【问题标题】:Filtering a DataFrame by traversing level by level通过逐级遍历过滤DataFrame
【发布时间】:2015-12-04 13:22:42
【问题描述】:

我有一个来自下面csv 内容的DataFrame

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 或多个子/子节点可以根据语言过滤条件找到。所以过滤后我需要在第一级删除主数据框。

在第 3 层应该像第 2 层一样做同样的事情,结果数据帧应该通过排队机制返回到一个基础。

【问题讨论】:

    标签: python multithreading class pandas multiprocessing


    【解决方案1】:

    如果文件非常大,您最好分块读取它(使用.read_csv() chunksize 参数)并按照IO docs 中所述和herehere from a multiprocessing perspective 中所述进行相应处理.

    要组合各种过滤器,您可以使用以下内容(如 here 所述:

    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 列,情况当然会略有不同,显然可能有多个值。

    【讨论】:

    • 感谢 Stefan,但我打算在类对象方法中执行此操作,并且我希望在最后一级(在本例中为 3 级)过滤的所有数据帧都单独发送回我的主进程(不在附录中)。如果您建议如何逐级过滤(第一级也可能有多个节点)然后深入一层,过滤掉,当达到最后一层时将它们分开存储...... ..方法应该是一种二叉树类型(不完全是因为一个父节点可能有 3 4 个子节点)...感谢有用的链接。
    猜你喜欢
    • 2022-08-19
    • 2014-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多