I used to think data cleaning was the boring part before the "real" work started. It isn't. It's where most of the real thinking actually happens.
The dataset I was working with had missing values scattered inconsistently, duplicate rows that weren't quite identical, and date formats that changed halfway through the file. None of that shows up as an error — it just quietly makes every downstream number wrong.
The first lesson was patience. It's tempting to drop anything that looks broken and move on. But a missing value isn't always noise — sometimes it's information. A customer with no purchase history might genuinely be new, not a data error.
The second lesson was distrust, in a healthy way. Every summary statistic I generated, I tried to sanity-check against the raw rows at least once. A few times, an "obvious" trend turned out to be a duplication bug, not a real pattern.
By the time the dataset was actually clean, I understood it far better than if I'd had a perfect CSV handed to me from the start. That's the part nobody mentions — cleaning data is also how you learn what the data means.