Pandas version checks
-
[x] I have checked that this issue has not already been reported.
-
[x] I have confirmed this bug exists on the latest version of pandas.
-
[x] I have confirmed this bug exists on the main branch of pandas.
Reproducible Example
import pandas as pd
data = {"A": [1, 2, 3], "B": [4, 5, 6], True: [7, 8, 9]}
df = pd.DataFrame(data)
cols = ["A"]
df[cols]
# A
# 0 1
# 1 2
# 2 3
cols = [True]
df[cols] # ValueError: Item wrong length 1 instead of 3.
Issue Description
The issue arises when attempting to access a pandas.DataFrame
using a list of boolean values as column names.
Expected Behavior
A
0 7
1 8
2 9
Installed Versions
Comment From: rhshadrach
Thanks for the report. Unfortunately because there are multiple acceptable inputs similar to [True]
(Boolean mask or list of columns), pandas has to make some choice as to what takes priority. It isn't clear to me that we should do one or the other, and because of that I'd be hesitant to change behavior here.
This is a great example of why I think pandas should only accept strings as columns (but of course, that would involve a significant amount of API changes and backwards incompatibility issues).
Comment From: arthurlw
-1 for the reasons above as well. [True]
is ambiguous between a mask and a label, and changing the behavior risks breaking existing usage.
Thanks for raising this edge case though!