Rate-limited geographic data lookup
Let's start with the zipcode data imported from the CSV file. This should probably be contained in its own method:

def get_zipcodes(zip_code_col_name, file_name="Downloads/test_order.csv"):
    excel_data = pd.read_csv(file_name, encoding='utf8')
    if zip_code_col_name not in excel_data.columns:
        raise ValueError("Missing zipcode column")
    return excel_data[zip_code_col_name].unique().tolist()


Note that pandas.Series objects have a unique method that avoids your expensive loop (the in lookup is \$\mathcal{O}(n)\$ for lists). If that was not the case you could have used set(excel_data[zip_code_col_name].tolist()), instead. The tolist is not strictly needed, since a pandas.Series is also iterable (and that is all you do with it).

Your main code should also be in a function (called main, if you can think of nothing else):

def main():
    # Putting max call to 49 for 1 hour
    get_geo_info_limited = RateLimiter(max_calls=49, period=3600, callback=limited)(get_geo_info)

    results = [get_geo_info_limited(zipcode, API_KEY, RETURN_FULL_RESULTS) for zipcode in zipcodes]
    df = pd.DataFrame(results)
    df.to_csv('Downloads/geo_info.csv', index=False)


Here I used the fact that RateLimiter can also be used as a decorator (which is usually done using the @RateLimiter syntax during function definition, but can also be done manually like here) and a list comprehension instead of a manual for loop.

You can then call this main function under a if __name__ == "__main__": guard to enable importing from this module from another script.