我惊讶地发现,在Pandas中,如果你想按名称删除列,my_dataframe.drop(['column_name_one','column_name_two','column_name_three'])工作,但是my_dataframe.drop(('column_name_one','column_name_two','column_name_three'))这一设计决定是否有技术上的原因,或哲学上的理由?
my_dataframe.drop(['column_name_one','column_name_two','column_name_three'])
my_dataframe.drop(('column_name_one','column_name_two','column_name_three'))
mzillmmw1#
方法文件规定:元组将被用作单个标签,而不被视为类似列表的标签。驱动这些语义的是:1.该方法接受单个标记为有效,即你可以用df.drop('foo')代替df.drop(['foo'])1.元组是Pandas中的有效列名。因此,根据这些事实,如果元组可以被解释为标签序列,那么df.drop(('foo', 'bar'))将是二义性的:是删除一列('foo', 'bar'),还是删除两列'foo'和'bar'?因此,我们以您观察到的行为结束,其中元组和列表被不等价地处理。
df.drop('foo')
df.drop(['foo'])
df.drop(('foo', 'bar'))
('foo', 'bar')
'foo'
'bar'
1条答案
按热度按时间mzillmmw1#
方法文件规定:
元组将被用作单个标签,而不被视为类似列表的标签。
驱动这些语义的是:
1.该方法接受单个标记为有效,即你可以用
df.drop('foo')
代替df.drop(['foo'])
1.元组是Pandas中的有效列名。
因此,根据这些事实,如果元组可以被解释为标签序列,那么
df.drop(('foo', 'bar'))
将是二义性的:是删除一列('foo', 'bar')
,还是删除两列'foo'
和'bar'
?因此,我们以您观察到的行为结束,其中元组和列表被不等价地处理。