It really depends on what you are trying to do, but here are some common differences.
Shells, including bash, want to treat all variables as strings and get the values of variables through simple textual substitution. Sometimes it’s convenient; sometimes not so much.
In shell scripts, you try to manipulate data by passing them through various utilities. Sometimes it’s convenient; sometimes not so much.
Python has very good string manipulations, so if you work a lot with a text file, it can be faster (both for writing and running) to do this in Python, and not to determine which sed or awk spell Do you want to.
Another thing is that many of the tools that you will use in shell scripts have so many options that they are essentially mini-languages, some of which are short to be dumb. Python can be much more readable than shell scripts that invoke many of these mini-languages because they are syntactically consistent.
Some projects lend themselves to an object-oriented approach that supports Python, and bash ... not so much. Python also supports some functional methods that are convenient for some projects, and bash ... you get an image.
In short, the shell scripting language is designed to glue various single-functional utilities with some amenities to make it easier, while Python is a reliable programming language in which you can create a complete graphical interface or web applications if you like.
I personally also find that the general Python syntax is much better than the shell scripting language; my programs, as a rule, do what I want without a lot of exercises, and when they do not, usually because of a logical error, and not an error that translates what I want into the language. Python is almost unique to me in this regard, although I have heard Ruby programmers say similar things about their favorite language.
If you are familiar with scripts and shell-like scripts, Perl might be an easier step, as it was originally intended to replace shell scripts (and sed / awk).