Apart from the marpet propose solution, I come up with this solution, I suppose it could be of use for those who are trying to get the bands data into a pandas dataframe. 
import pandas as pd
import numpy as np
import traceback
from snappy import ProductIO
from snappy import GeoPos
from snappy import PixelPos
path_to_sentinel_data = "S2A_MSIL2A_20160110T152632_N0201_R025_T18NXM_20160110T153105_subsetoutput_ndvi.dim"
product_subset = ProductIO.readProduct(path_to_sentinel_data)
bands_names = list(product_subset.getBandNames())[1:13]
gc = product_subset.getSceneGeoCoding()
lat, lon = (5.914702982, -73.51362747)
print(bands_names)
cols = ['lat', 'lon', 'X', 'Y']
cols.extend(bands_names)
print(cols)
df_bands = pd.DataFrame(columns=cols)
pixel_pos = gc.getPixelPos(GeoPos(lat, lon), None)
data = list()
print("(lat, lon) -→ (X, Y) : (%s, %s) -→ (%s, %s)" % (lat, lon, int(pixel_pos.x), int(pixel_pos.y)))
data.append(lat)
data.append(lon)
data.append(int(pixel_pos.x))
data.append(int(pixel_pos.y))
for i, band_name in enumerate(bands_names):
temp_band = product_subset.getBand(band_name)
width, height = temp_band.getRasterWidth(), temp_band.getRasterHeight()
try:
tmp = np.zeros(1)
temp_band.readPixels(int(pixel_pos.x), int(pixel_pos.y), 1, 1, tmp)
data.append(tmp[0])
except Exception as e:
print(band_name)
print(width, height)
print(int(pixel_pos.x), int(pixel_pos.y))
print(e)
traceback.print_exc()
df_bands.loc[df_bands.shape[0]] = data
df_bands
Out[]
['B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B8', 'B8A', 'B9', 'B11', 'B12']
['lat', 'lon', 'X', 'Y', 'B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B8', 'B8A', 'B9', 'B11', 'B12']
(lat, lon) -→ (X, Y) : (5.914702982, -73.51362747) -→ (2071, 3162)