Home > OS >  Set decimal values to 2 points in list under list pandas
Set decimal values to 2 points in list under list pandas

Time:07-30

I am trying to set max decimal values upto 2 digit for result of a nested list. I have already tried to set precision and tried other things but can not find a way.

r_ij_matrix = variables[1]
print(type(r_ij_matrix))
print(type(r_ij_matrix[0]))
pd.set_option('display.expand_frame_repr', False)
pd.set_option("display.precision", 2)
data = pd.DataFrame(r_ij_matrix, columns= Attributes,  index= Names)
df = data.style.set_table_styles([dict(selector='th', props=[('text-align', 'center')])])
df.set_properties(**{'text-align': 'center'})
df.set_caption('Table: Combined Decision Matrix')

enter image description here

CodePudding user response:

You can solve your problem with the apply() method of the dataframe. You can do something like that :

df.apply(lambda x: [[round(elt, 2) for elt in list_] for list_ in x])

CodePudding user response:

Solved it by copying the list to another with the desired decimal points. Thanks everyone.

rij_matrix = variables[1]
rij_nparray = np.empty([8, 6, 3])
for i in range(8):
  for j in range(6):
    for k in range(3):
        rij_nparray[i][j][k] = round(rij_matrix[i][j][k], 2)
 rij_list = rij_nparray.tolist()
 pd.set_option('display.expand_frame_repr', False)
 data = pd.DataFrame(rij_list, columns= Attributes,  index= Names)
df = data.style.set_table_styles([dict(selector='th', props=[('text-align', 'center')])])
df.set_properties(**{'text-align': 'center'})
df.set_caption('Table: Normalized Fuzzy Decision Matrix (r_ij)')

CodePudding user response:

applymap seems to be good here: but there is a BUT: be aware that it is propably not the best idea to store lists as values of a df, you just give up the functionality of pandas. and also after formatting them like this, there are stored as strings. This (if really wanted) should only be for presentation.

df.applymap(lambda lst: list(map("{:.2f}".format, lst)))

Output:

                    A                   B
0  [2.05, 2.28, 2.49]  [3.11, 3.27, 3.42]
1  [2.05, 2.28, 2.49]  [3.11, 3.27, 3.42]
2  [2.05, 2.28, 2.49]  [3.11, 3.27, 3.42]

Used Input:

df = pd.DataFrame({
    'A': [[2.04939015319192, 2.280350850198276, 2.4899799195977463],
  [2.04939015319192, 2.280350850198276, 2.4899799195977463],
  [2.04939015319192, 2.280350850198276, 2.4899799195977463]],
    'B': [[3.1144823004794873, 3.271085446759225, 3.420526275297414],
  [3.1144823004794873, 3.271085446759225, 3.420526275297414],
  [3.1144823004794873, 3.271085446759225, 3.420526275297414]]})
  • Related