tl; dr:
concat``append如果列不匹配,则当前对非串联索引(例如,如果要添加行的列)进行排序。在大熊猫0.23中,这开始产生警告。传递参数
sort=True以使其静音。将来默认值将更改为
不 排序,因此最好指定一个
sort=True或
False现在,或者更好地确保您的非串联索引匹配。
该警告在 pandas 0.23.0中 是新的:
在大熊猫的未来版本
pandas.concat()和
Dataframe.append()将不再这类非串列轴线时尚未对齐。当前行为与先前的行为相同(排序),但是当未指定sort且未串联轴未对齐link时,将发出警告 。
来自链接的非常老的github问题的更多信息,由smcinerney评论:
连接Dataframe时,如果列名称之间存在任何差异,则按字母数字顺序对其进行排序。如果它们在Dataframes中相同,则不会排序。
这种记录是无证的和不需要的。当然,默认行为应为不排序。
一段时间后,参数
sort在
pandas.concat和中实现
Dataframe.append:
排序 :布尔值,默认值无
如果联接为“外部”时未对齐轴,则对非串联轴进行排序。当前默认的排序默认值已弃用,在以后的熊猫版本中将更改为不排序。
显式传递sort = True可使警告和排序静音。显式传递sort = False可使警告静音而不进行排序。
当join =’inner’时,这没有任何作用,因为已经保留了非串联轴的顺序。
因此,如果两个Dataframe具有相同顺序的相同列,则不会出现警告,也不会进行排序:
df1 = pd.Dataframe({"a": [1, 2], "b": [0, 8]}, columns=['a', 'b'])df2 = pd.Dataframe({"a": [4, 5], "b": [7, 3]}, columns=['a', 'b'])print (pd.concat([df1, df2])) a b0 1 01 2 80 4 71 5 3df1 = pd.Dataframe({"a": [1, 2], "b": [0, 8]}, columns=['b', 'a'])df2 = pd.Dataframe({"a": [4, 5], "b": [7, 3]}, columns=['b', 'a'])print (pd.concat([df1, df2])) b a0 0 11 8 20 7 41 3 5但是,如果Dataframe具有不同的列或相同的列,但顺序不同,则如果未
sort显式设置参数(
sort=None默认值),pandas将返回警告:
df1 = pd.Dataframe({"a": [1, 2], "b": [0, 8]}, columns=['b', 'a'])df2 = pd.Dataframe({"a": [4, 5], "b": [7, 3]}, columns=['a', 'b'])print (pd.concat([df1, df2]))FutureWarning:排序,因为未连接的轴未对齐。
a b0 1 01 2 80 4 71 5 3print (pd.concat([df1, df2], sort=True)) a b0 1 01 2 80 4 71 5 3print (pd.concat([df1, df2], sort=False)) b a0 0 11 8 20 7 41 3 5
如果Dataframes的列不同,但是前几列对齐-它们将正确地彼此分配(列
a以及在下面的示例中
b,
df1with
a和
bfrom
df2),因为它们都存在。对于存在于一个而不是两个Dataframe中的其他列,将创建缺少的值。
最后,如果您通过
sort=True,则按字母数字顺序对列进行排序。如果
sort=False第二个Dafaframe的列不在第一列中,则它们将不进行排序地附加到末尾:
df1 = pd.Dataframe({"a": [1, 2], "b": [0, 8], 'e':[5, 0]}, columns=['b', 'a','e'])df2 = pd.Dataframe({"a": [4, 5], "b": [7, 3], 'c':[2, 8], 'd':[7, 0]}, columns=['c','b','a','d'])print (pd.concat([df1, df2]))FutureWarning:排序,因为未连接的轴未对齐。
a b c d e0 1 0 NaN NaN 5.01 2 8 NaN NaN 0.00 4 7 2.0 7.0 NaN1 5 3 8.0 0.0 NaNprint (pd.concat([df1, df2], sort=True)) a b c d e0 1 0 NaN NaN 5.01 2 8 NaN NaN 0.00 4 7 2.0 7.0 NaN1 5 3 8.0 0.0 NaNprint (pd.concat([df1, df2], sort=False)) b a e c d0 0 1 5.0 NaN NaN1 8 2 0.0 NaN NaN0 7 4 NaN 2.0 7.01 3 5 NaN 8.0 0.0
在您的代码中:
placement_by_video_summary = placement_by_video_summary.drop(placement_by_video_summary_new.index).append(placement_by_video_summary_new, sort=True).sort_index()



