How to handle columns with categorical data and many unique values
For categorical columns, you have two options :


Entity Embeddings 
One Hot Vector 


For a column with 145 values, I would use one hot encoding and Embedding for ~3k values. This decision might change depending on overall number of features. 

Embeddings map feature values into a 1D vector so that model knows NYC, Paris, London are similar cities in one aspect (size) and very different in other aspects.  So, instead of using ~3k column of features, model will have ~50 columns of vector representation.

Articles that explain Embeddings : 


An Overview of Categorical Input Handling for Neural Networks
On learning embeddings for categorical data using Keras
Google Developers > Machine Learning > Embeddings: Categorical Input Data
Exploring Embeddings for Categorical Variables with Keras by Florian Teschner