您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python Pandas用户警告:正在排序,因为非串联轴未对齐

Python Pandas用户警告:正在排序,因为非串联轴未对齐

concat``append如果列不匹配,则当前对非串联索引(例如,如果要添加行的列)进行排序。在大熊猫0.23中,这开始产生警告。传递参数sort=True以使其静音。将来认值将更改为 排序,因此最好指定一个sort=TrueFalse现在,或者更好地确保您的非串联索引匹配。

该警告在 是新的:

在大熊猫的未来版本pandas.concat()DataFrame.append()将不再这类非串列轴线时尚未对齐。当前行为与先前的行为相同(排序),但是当未指定sort且未串联轴未对齐link时发出警告 。

来自链接的非常老的github问题的更多信息,由smcinerney评论

连接DataFrame时,如果列名称之间存在任何差异,则按字母数字顺序对其进行排序。如果它们在DataFrames中相同,则不会排序。

这种记录是无证的和不需要的。当然,认行为应为不排序。

一段时间后,参数sortpandas.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以及在下面的示例中bdf1withabfromdf2),因为它们都存在。对于存在于一个而不是两个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()
python 2022/1/1 18:37:31 有544人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶