为什么以及何时在Pandas中使用append()而不是concat()?

rsaldnfx  于 2023-06-28  发布在  其他
关注(0)|答案(3)|浏览(158)

我已经阅读了关于appendconcat的所有主题,但仍然:如果concat具有相同的选项和功能,为什么我应该使用append
如果我说错了请纠正我。

  • append():可以一次追加两个 Dataframe ;它与axis=0中的concat相同
  • concat():可以连接多个DF

要连接多个DF,我应该使用append()和for循环吗?是不是更快?
让我们假设我正在从不同的文件中打开DF,如:

df = pd.DataFrame()
for file in file_folder:
    df = df.append(pd.read_csv(file))

OR 

df = pd.DataFrame()
for file in file_folder:
   df = pd.concat([df, pd.read_csv(file)])

输出是相同的。那是为什么

**编辑:**为了加快速度,我应该做:

df_list = []
for file in file_folder:

    df_list.append(pd.read_csv(file))

#and then use concat

df_all = pd.concat(df_list)`

对吧?

t9aqgxwy

t9aqgxwy1#

append是一个在后台调用concat的方便方法。如果您查看append方法的实现,就会发现这一点。

def append(...
    ...
    if isinstance(other, (list, tuple)):
        to_concat = [self, *other]
    else:
        to_concat = [self, other]
    return concat(
        to_concat,
        ignore_index=ignore_index,
        verify_integrity=verify_integrity,
        sort=sort,
    )

至于表演。在循环中一遍又一遍地调用这两个函数在计算上都是昂贵的。你应该只创建一个列表,并在循环完成后进行一次连接。
docs
迭代地将行附加到DataFrame可能比单个连接更耗费计算。更好的解决方案是将这些行追加到一个列表中,然后一次性将该列表与原始DataFrame连接起来。

toe95027

toe950272#

由于其他答案都是旧的,我想补充一点,pd.append现在已经被弃用,而支持pandas 1.4的pd.concat。因此,以下内容对于今天遇到这个问题的人来说是有用的信息。
要连接多个 Dataframe ,您不应该使用带有for循环的append(),因为它可能会在计算上昂贵且缓慢。您应该创建一个数据框列表,然后在列表中使用concat()一次。例如:

# Create an empty list of data frames
df_list = []

# Loop over the files and append each data frame to the list
for file in file_folder:
    df_list.append(pd.read_csv(file))

# Concatenate the list of data frames into one data frame
df_all = pd.concat(df_list)

通过这种方式,可以避免创建 Dataframe 的中间副本,并减少内存使用量和执行时间。
| 示例|使用concat()|使用append()|
| - -----|- -----|- -----|
| 按行追加两个数据框|df = pd.concat([df1,df2],axis=0)|df = df1.append(df2)|
| 按列追加两个数据框|df = pd.concat([df1,df2],axis=1)|df = df1.join(df2)|
| 将多个数据框按行与不同的列连接起来|df = pd.concat([df1,df2,df3],axis=0,join='outer')|df = pd.DataFrame()对于[df 1,df 2,df 3]中的df_i: df = df.append(df_i)|
| 使用公共列按行连接多个数据框|df = pd.concat([df1,df2,df3],axis=0,join='inner')|df = pd.DataFrame()对于[df 1,df 2,df 3]中的df_i: df = df.append(df_i,join='inner')|
| 使用分层索引连接多个数据框|df = pd.concat([df1,df2,df3],axis=0,keys=['one',' two','three'])|df_dict = {} for key,df_i in zip(['one',' two','three'],[df1,df2,df3]): df_dict[key] = df_i df = pd.concat(df_dict.values(),axis=0,keys=df_dict.keys())|
很明显,concat()使用更简洁的语法,速度更快。因此,没有理由使用append()
即使您喜欢已弃用的pd.append,请记住pd.concat函数比pd.append函数更高效、更快,并且具有相同的选项和功能。就像Matus Dubrava提到的那样,append无论如何都会在后台调用concat

nwsw7zdq

nwsw7zdq3#

1.**可以任意选择使用.append().concat()**例如,如果您必须在axis=1上合并两个 Dataframe ,则使用concat,另一方面,如果您必须在axis=0上合并两个 Dataframe ,则使用您喜欢使用或最适合您的任何选择!
1.**就我个人而言,我建议你使用pandas默认DF合并(concat),以避免任何延迟,延迟和最重要的代码中的错误。
希望这些信息对您有用,并回答您的问题!
编码快乐!

相关问题