MathLal
MathLal

Reputation: 402

Pandas DataFrame naming only 1 column

Is there a way with Pandas Dataframe to name only the first or first and second column even if there's 4 columns :

Here

for x in range(1, len(table2_query) + 1):
    if x == 1:
        cursor.execute(table2_query[x])
        df = pd.DataFrame(data=cursor.fetchall(), columns=['Q', col_name[x-1]])

and it gives me this :

AssertionError: 2 columns passed, passed data had 4 columns

Upvotes: 2

Views: 661

Answers (1)

piRSquared
piRSquared

Reputation: 294488

Consider the df:

df = pd.DataFrame(np.arange(8).reshape(2, 4), columns=list('ABCD'))
df

enter image description here

then use rename and pass a dictionary with the name changes to the argument columns:

df.rename(columns=dict(A='a', B='b'))

enter image description here

Instantiating a DataFrame while only naming a subset of the columns

When constructing a dataframe with pd.DataFrame, you either don't pass an index/columns argument and let pandas auto-generate the index/columns object, or you pass one in yourself. If you pass it in yourself, it must match the dimensions of your data. The trouble of mimicking the auto-generation of pandas while augmenting just the ones you want is not worth the trouble and is ugly and is probably non-performant. In other words, I can't even think of a good reason to do it.

On the other hand, it is super easy to rename the columns/index values. In fact, we can rename just a few. I think below is more in line with the spirit of your question:

df = pd.DataFrame(np.arange(8).reshape(2, 4)).rename(columns=str).rename(columns={'1': 'A', '3': 'F'})
df

enter image description here

Upvotes: 2

Related Questions