Как преобразовать определенный диапазон элементов в фрейме данных panda в числа с плавающей запятой?

#python #python-3.x #pandas #python-2.7 #numpy

#python #python-3.x #pandas #python-2.7 #numpy

Вопрос:

У меня есть фрейм данных panda, подобный следующему

введите описание изображения здесь

и это данные:

       0         1               2    3            4                   5            6
0   Label   Total/Target    Jaccard Dice    VolumeSimilarity    FalseNegative   FalsePositive
1   image-9003406   0.753958942196244   0.628584809743865   0.771939914928625   -0.0476974851707525 0.246041057803756   0.209200511636753
2   image-9007827   0.783266136200411   0.652181507072358   0.789479248231042   -0.015864625683349  0.216733863799589   0.204208282912204
3   image-9040390   0.797836181211824   0.611217035556112   0.758702300270988   0.0981000407411853  0.202163818788176   0.276772045623749
4   image-9047800   0.833585767007274   0.627592483537663   0.771191179469637   0.149701662401568   0.166414232992726   0.282513296651508
5   image-9054866   0.828860635279561   0.652709649240693   0.789866083907199   0.0940919370823063  0.171139364720439   0.245624253720476
6   image-9056363   0.795614053800371   0.658368025419615   0.793995078689519   0.00406974990730408 0.204385946199629   0.207617320977731
7   image-9068453   0.763313209747495   0.565848914378489   0.722737563225356   0.106314540359027   0.236686790252505   0.313742036740474
8   image-9085290   0.633747182342442   0.498166624744976   0.665035005475144   -0.0987391313269621 0.366252817657558   0.300427399066708
9   image-9087863   0.663537911271341   0.539359224086608   0.700758102003958   -0.112187081100769  0.336462088728659   0.257597937816249
10  image-9094865   0.667530629804239   0.556419610760253   0.714999485888594   -0.142222256073179  0.332469370195761   0.230263697338428
  

Однако мне нужно преобразовать данные, начинающиеся с column #1 и row #1 , в числа, при сохранении в файл Excel они сохраняются в виде строки.

Как это сделать?

мы ценим вашу помощь

Ответ №1:

Используйте:

 #set columns by first row
df.columns = df.iloc[0]
#set index by first column
df.index = df.iloc[:, 0]
#remove first row, first col and cast to floats
df = df.iloc[1:, 1:].astype(float)
print (df)
0              Total/Target   Jaccard      Dice  VolumeSimilarity  
Label                                                               
image-9003406      0.753959  0.628585  0.771940         -0.047697   
image-9007827      0.783266  0.652182  0.789479         -0.015865   
image-9040390      0.797836  0.611217  0.758702          0.098100   
image-9047800      0.833586  0.627592  0.771191          0.149702   
image-9054866      0.828861  0.652710  0.789866          0.094092   
image-9056363      0.795614  0.658368  0.793995          0.004070   
image-9068453      0.763313  0.565849  0.722738          0.106315   
image-9085290      0.633747  0.498167  0.665035         -0.098739   
image-9087863      0.663538  0.539359  0.700758         -0.112187   
image-9094865      0.667531  0.556420  0.714999         -0.142222   

0              FalseNegative  FalsePositive  
Label                                        
image-9003406       0.246041       0.209201  
image-9007827       0.216734       0.204208  
image-9040390       0.202164       0.276772  
image-9047800       0.166414       0.282513  
image-9054866       0.171139       0.245624  
image-9056363       0.204386       0.207617  
image-9068453       0.236687       0.313742  
image-9085290       0.366253       0.300427  
image-9087863       0.336462       0.257598  
image-9094865       0.332469       0.230264  
  

Комментарии:

1. Большое спасибо, у меня это действительно сработало, умный способ :).

2. Могу я задать еще один вопрос? Как получить среднее значение в каждом числовом столбце?

3. @S.EB — как вы думаете, новое row понравится df.loc['avg'] = df.mean() после моего решения? Или новый столбец, подобный df['avg'] = df.mean(axis=1) ?

4. Новая строка, принимающая среднее значение по каждому столбцу. Еще раз большое спасибо. Итак, я добавил это df.loc['avg'] = df.mean()