There are a few options available:
- Running an Apex class
A recent feature in Spring '16 allows running Apex after a sandbox has either been created or refreshed.
This approach might be useful for small amounts of data and also reconfiguring a sandbox. It might not be suitable for pulling data out of production, but if the data is static enough it may suffice.
- Automating the data loader
The data loader provided by Salesforce can be run from the command line. This means you could pull out the data which you need an then push this back into your sandbox.
More information on this can be found at Salesforce:
Additionally, if you use continuous integration in your projects (such as Jenkins), you can additionally enhance your deployments by populating the next org with data during deployments.
Explore the AppExchange for rebuilt solutions (paid, usually). Doing a quick search I found several solutions for your problem, such as:
Hope this helps!