There are approximately one million articles about Python libraries out there, and most of them read like they were written by someone who read the documentation but never actually used the thing. So here's my take — these are the Python libraries I actually use in my day-to-day work, and why I keep coming back to them.

NumPy

If you do anything with numbers in Python, you end up using NumPy. There's no way around it. I use it mostly for data manipulation and linear algebra stuff — reshaping arrays, matrix operations, that kind of thing. The syntax takes a bit of getting used to if you're coming from plain Python lists, but once you get the hang of broadcasting and vectorised operations, going back to writing for-loops feels wrong.

One thing I wish someone told me earlier: don't try to learn all of NumPy at once. Just learn the bits you need for your current project and pick up the rest as you go. The documentation is huge and trying to read it end-to-end is a waste of time.

Pandas

Pandas is the one library I genuinely use every single day. Whether I'm cleaning up a messy CSV, doing exploratory data analysis, or preparing data for a model, it's always Pandas. The DataFrame structure just makes sense — it's basically a spreadsheet that you can actually work with programmatically.

The thing about Pandas is that there are usually three ways to do anything, and two of them are wrong. I've been using it for years and I still sometimes find myself Googling how to do a groupby with multiple aggregations. But that's fine, it works, and the community is big enough that someone has already asked your exact question on Stack Overflow.

My most-used operations: read_csv, groupby, merge, value_counts, and apply. If you learn those five, you can probably handle 80% of data tasks.

Django

I use Django when I need to build a web application quickly and I don't want to make decisions about every little thing. Django comes with an ORM, authentication, admin panel, URL routing — basically everything you need to get a working application running. Some people call it "batteries included", I call it "I don't want to spend a week deciding which auth library to use".

The admin panel alone is worth the price of admission. I've built internal tools at work where the admin panel was basically the entire application — no custom frontend needed, just the built-in admin with some customisation. It's not pretty, but it works.

The ORM is decent. It can do most things you'd need, and when it can't, you can always drop down to raw SQL. I've had some issues with complex queries being really slow, but that's usually a sign that I need to think about my database design rather than blame Django.

Flask

Flask is what I use when Django feels too heavy. It's basically the opposite philosophy — give you the minimum and let you build the rest yourself. I like it for small APIs or quick prototypes where I don't need all the Django infrastructure.

The downside is that you end up making a lot of decisions that Django would make for you. Which ORM? Which auth library? How do you structure the project? If you've already made those decisions before, Flask is great. If you haven't, it can be a rabbit hole of comparing libraries and reading comparison posts.

Scikit-learn

For machine learning, scikit-learn is where I start. Not because it's the most powerful option — it's not, and for deep learning you want TensorFlow or PyTorch — but because it has a consistent API that works across everything. Once you learn the fit, predict, transform pattern, you can use pretty much any model in the library.

I use it a lot for the "boring" parts of ML — preprocessing, feature selection, model evaluation, cross-validation. The actual fancy model training is usually a small part of the work, and scikit-learn handles the rest really well.

Matplotlib

I have a love-hate relationship with Matplotlib. It can make beautiful plots, but the API is a mess and the documentation is confusing. There's always some obscure parameter you need to set to make the plot look decent, and finding it takes longer than it should.

I keep using it though, because it's the one that's always available. When I need something nicer quickly, I use Seaborn (which is built on top of Matplotlib anyway). When I need interactive plots, I use Plotly. But Matplotlib is the reliable workhorse that I always come back to.

The rest

There are plenty of other libraries I use occasionally — Requests for HTTP calls, Celery for background tasks, SQLAlchemy when I don't want Django's ORM, Pillow for image processing. But the ones above are the ones I use consistently.

The thing about Python is that the ecosystem is so big that you can always find a library for what you need. The trick is not to get distracted by every new shiny thing that appears on Hacker News. Pick the boring, well-maintained libraries and learn them properly. Your future self will thank you.