我选择了一个 Dataframe 的几个列,通过列名称的列表。如果列表中的所有元素都在 Dataframe 中,则此操作可以正常工作。但是如果列表中的某些元素不在DataFrame中,那么它将生成错误“not in index”。
有没有一种方法可以选择列表中包含的所有列,即使列表中的所有元素都没有包含在 Dataframe 中?下面是一些生成上述错误的示例数据:
df = pd.DataFrame( [[0,1,2]], columns=list('ABC') )
lst = list('ARB')
data = df[lst] # error: not in index
6条答案
按热度按时间yrwegjxp1#
我想你需要
Index.intersection
:numpy.intersect1d
的另一个解决方案:dwthyt8l2#
很少有其他方法,列表理解要快得多
时间
详细信息
tzcvj98z3#
这里一个非常简单的解决方案是使用
filter()
。在您的示例中,只需键入:并且它将自动忽略任何缺失的列。有关更多信息,请参阅documentation for filter。
一般来说,
filter
是一种非常灵活和强大的选择特定列的方法。特别是,您可以使用正则表达式。借用@jezrael的示例数据,您可以键入以下任一项。这些都是很简单的例子,但是假设你只想要以这些字母开头的列,那么你可以输入:
FWIW,在一些快速的计时中,我发现这比列表解析方法更快,但我不认为速度在这里真的是一个很大的问题-即使是最慢的方法也应该足够快,因为速度不取决于 Dataframe 的大小,只取决于列的数量。
老实说,所有这些方法都很好,你可以用任何对你来说最具可读性的方法。我更喜欢filter,因为它很简单,同时也比简单的交集提供了更多的选择列的选项。
wgx48brx4#
使用
*
与列表data = df[[*lst]]
它会给予想要的结果。
wnavrhmk5#
我发现这是选择列子集的最佳和最有效的方法。
mklgxw1f6#
请试试这个:
语法:DataframeList of Columns
例如:df'a','b'
X是要切片的req列的列表
这会给予你一个req切片:
性能: