You need to set the storage type in DSS to string:
Then when you do a python recipe, you should say to pandas to not infer types. You load the dataframe wih:
test = dataiku.Dataset("test")
test_df = test.get_dataframe(infer_with_pandas=False)
However, the NA is going to disappear because pandas magically convert it to NaN. So you could fill the empty value with 'NA'.
test_df["id"] = test_df["id"].fillna("NA")
If you write test_df in an output dataset, you'll retrieve your original id column.