如何将 DataFrame.append() 转换为 pandas.concat()?

Ste*_*ell 21 python concatenation append dataframe pandas

在 pandas 1.4.0 中:append()已被弃用,文档说可以使用concat()

FutureWarning:frame.append 方法已弃用,并将在未来版本中从 pandas 中删除。使用 pandas.concat 代替。

有问题的代码块:

def generate_features(data, num_samples, mask):
    """
    The main function for generating features to train or evaluate on.
    Returns a pd.DataFrame()
    """
    logger.debug("Generating features, number of samples", num_samples)
    features = pd.DataFrame()

    for count in range(num_samples):
        row, col = get_pixel_within_mask(data, mask)
        input_vars = get_pixel_data(data, row, col)
        features = features.append(input_vars)
        print_progress(count, num_samples)

    return features
Run Code Online (Sandbox Code Playgroud)

这是我尝试过但不起作用的两个选项:

features = pd.concat([features],[input_vars])
Run Code Online (Sandbox Code Playgroud)

pd.concat([features],[input_vars])
Run Code Online (Sandbox Code Playgroud)

这是已弃用并引发错误的行:

features = features.append(input_vars)
Run Code Online (Sandbox Code Playgroud)

小智 17

您可以将循环中生成的 DataFrame 存储在列表中,并features在完成循环后将它们连接起来。

换句话说,替换循环:

for count in range(num_samples):
    # .... code to produce `input_vars`
    features = features.append(input_vars)        # remove this `DataFrame.append`
Run Code Online (Sandbox Code Playgroud)

与下面的一个:

tmp = []                                  # initialize list
for count in range(num_samples):
    # .... code to produce `input_vars`
    tmp.append(input_vars)                        # append to the list, (not DF)
features = pd.concat(tmp)                         # concatenate after loop
Run Code Online (Sandbox Code Playgroud)

您当然可以在循环中连接,但只执行一次会更有效。


Arc*_*Pwn 5

这将“追加”空白 df 并通过使用 concat 选项防止将来出现错误

features= pd.concat([features, input_vars])
Run Code Online (Sandbox Code Playgroud)

然而,如果无法访问实际数据和数据结构,这仍然很难测试复制。

  • 在最新版本的 Pandas 官方文档中,您将看到 .append() 已被弃用。https://pandas.pydata.org/docs/whatsnew/v1.4.0.html 他们说我应该使用 concat() 代替,但我无法让它工作。我将继续探索 pandas 文档。 (3认同)