小编Sqr*_*tPi的帖子

如何将数据框分成固定大小的组?

我正在处理大型数据框(>100 000 行和多列)。我需要对数据框进行排序,然后将其分成预定义大小的相等大小的组。如果还有剩余的行(即,如果行数不能被组的大小整除),则需要从数据框中删除任何较小的组。

例如1, 2, 3, 4, 5, 6, 7, 8, 9, 10,组大小3 应分为[1, 2, 3][4, 5, 6][7, 8, 9]10应丢弃。

我有一个解决方案,我可以使用创建一个新列

list(range(len(df.index) // group_size)) * group_size
Run Code Online (Sandbox Code Playgroud)

然后使用sort(), 和 将group_by()行分组在一起。之后我可以filter删除任何小于 的组group_size

示例工作代码:

list(range(len(df.index) // group_size)) * group_size
Run Code Online (Sandbox Code Playgroud)

这非常有效。不幸的是,我有很大的数据框,并且运行时间太长。我的方法还有其他选择吗?

python optimization dataframe pandas

3
推荐指数
1
解决办法
9118
查看次数

如何编写 Python 代码以支持 Windows 和 Linux?

我有一些代码需要在 Windows 和 Linux 上做非常相似的事情。不幸的是,我需要几个特定于系统的功能(例如隐藏文件:Python 跨平台隐藏文件)。为可读性和可维护性编写代码的最佳方法是什么?

目前,代码使用许多if语句在不同平台上表现不同。我考虑过的另一种方法是将代码拆分为两个独立的函数,一个用于 Windows,一个用于 Linux,但这意味着在两个地方更新代码的主要部分。

请注意,代码的主要部分比这要长得多,也更复杂。

组合方法(最大的可维护性但有很多if语句):

import os

def sort_out_files():
    if is_linux:
        do_linux_preparations()
    else:
        do_windows_preparations()

    # Main part of the code:
    for file in os.listdir(folder):
        if is_correct_file(file):
            if is_linux:
                do_main_actions_for_linux()
            else:
                do_main_actions_for_windows()

    if is_linux:
        do_linux_tidying_up()
    else:
        do_windows_tidying_up()

Run Code Online (Sandbox Code Playgroud)

单独的方法(需要更多的维护,但需要的if语句更少):

import os

def sort_out_files_linux():
    do_linux_preparations()

    # Main part of the code:
    for file in os.listdir(folder):
        if is_correct_file(file):
            do_main_actions_for_linux()

    do_linux_tidying_up()


def sort_out_files_windows():
    do_windows_preparations()

    # Main part of the code:
    for …
Run Code Online (Sandbox Code Playgroud)

python linux windows

1
推荐指数
2
解决办法
1233
查看次数

标签 统计

python ×2

dataframe ×1

linux ×1

optimization ×1

pandas ×1

windows ×1