Why does.info() and .describe() in pandas have ()?
The rough rule of thumb I would offer is to use an attribute for data that can be used as stored, and a function for data that needs to have something done to it before it's returned.
In your example, .shape just returns the tuple as it is stored by the system. It's a straightforward attribute.
By comparison, .info() and .describe() both apply filtering/formatting etc to the data before it is returned. You can also optionally pass them parameters to specify how the data is filtered/formatted before it is returned to you.
There are other reasons why attributes might be accessed through functions, such as using getters and setters to access protected attributes, but in your present examples it's because the functions don't just return the data, they do something to the data first.
I'm trying to figure a way to know how to differentiate between methods and property/attribute, and how to use them correctly without getting mixed up (when to use parenthesis when not to)
From what I understand, (correct me if I am wrong):

Methods are functions that takes in an input (exp a value) and returns an output;  *exp .sum()


Property/attribute tells you additional information or describe the characteristics  *exp .index .shape .columns

My question is, .info() and .describe() are somewhat similar to .shape and .index which give you the description and info but why is it a method and not an attribute/property?