我已经阅读了关于append
与concat
的所有主题,但仍然:如果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)`
对吧?
3条答案
按热度按时间t9aqgxwy1#
append
是一个在后台调用concat
的方便方法。如果您查看append
方法的实现,就会发现这一点。至于表演。在循环中一遍又一遍地调用这两个函数在计算上都是昂贵的。你应该只创建一个列表,并在循环完成后进行一次连接。
docs:
迭代地将行附加到DataFrame可能比单个连接更耗费计算。更好的解决方案是将这些行追加到一个列表中,然后一次性将该列表与原始DataFrame连接起来。
toe950272#
由于其他答案都是旧的,我想补充一点,
pd.append
现在已经被弃用,而支持pandas 1.4的pd.concat
。因此,以下内容对于今天遇到这个问题的人来说是有用的信息。要连接多个 Dataframe ,您不应该使用带有for循环的
append()
,因为它可能会在计算上昂贵且缓慢。您应该创建一个数据框列表,然后在列表中使用concat()
一次。例如:通过这种方式,可以避免创建 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
。nwsw7zdq3#
1.**可以任意选择使用
.append()
或.concat()
**例如,如果您必须在axis=1
上合并两个 Dataframe ,则使用concat
,另一方面,如果您必须在axis=0
上合并两个 Dataframe ,则使用您喜欢使用或最适合您的任何选择!1.**就我个人而言,我建议你使用pandas默认DF合并(concat),以避免任何延迟,延迟和最重要的代码中的错误。
希望这些信息对您有用,并回答您的问题!
编码快乐!