concat``append
如果列不匹配,则当前对非串联索引(例如,如果要添加行的列)进行排序。在大熊猫0.23中,这开始产生警告。传递参数sort=True
以使其静音。将来默认值将更改为 排序,因此最好指定一个sort=True
或False
现在,或者更好地确保您的非串联索引匹配。
该警告在 是新的:
在大熊猫的未来版本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 b
0 1 0
1 2 8
0 4 7
1 5 3
df1 = 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 a
0 0 1
1 8 2
0 7 4
1 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 b
0 1 0
1 2 8
0 4 7
1 5 3
print (pd.concat([df1, df2], sort=True))
a b
0 1 0
1 2 8
0 4 7
1 5 3
print (pd.concat([df1, df2], sort=False))
b a
0 0 1
1 8 2
0 7 4
1 3 5
如果DataFrames的列不同,但是前几列对齐-它们将正确地彼此分配(列a
以及在下面的示例中b
,df1
witha
和b
fromdf2
),因为它们都存在。对于存在于一个而不是两个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 e
0 1 0 NaN NaN 5.0
1 2 8 NaN NaN 0.0
0 4 7 2.0 7.0 NaN
1 5 3 8.0 0.0 NaN
print (pd.concat([df1, df2], sort=True))
a b c d e
0 1 0 NaN NaN 5.0
1 2 8 NaN NaN 0.0
0 4 7 2.0 7.0 NaN
1 5 3 8.0 0.0 NaN
print (pd.concat([df1, df2], sort=False))
b a e c d
0 0 1 5.0 NaN NaN
1 8 2 0.0 NaN NaN
0 7 4 NaN 2.0 7.0
1 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()