2017-04-11 70 views
0

试图将教程应用于我自己的某些数据。教程链接: https://github.com/brendonhall/facies_classification/blob/master/Facies%20Classification%20-%20SVM.ipynb错误:列表索引必须是整数,而不是float',在索引0处发生。Python 3.x

我是在[3]代码框中。

当试图确定使用的彩色地图绘制中我得到的错误:

“类型错误(‘列表索引必须是整数,而不是浮动’,在索引0' u'occurred)”我已经贴我的代码如下。在此先感谢,

import pandas as pd 

# Load data 
data = pd.read_csv('BHPAND.csv') 
data.describe() 
data['BH'] = data['BH'].astype('category') 
data['FM'] = data['FM'].astype('category') 
data['SBTN'] = data['SBTN'].astype('category') 
# Set names of Borehole UID's 
data['BH'].unique() 

# Define colours for facies based on SBTn 
# 1=sensitive fine grained 2=organic clay 3=silty clay to clay 
# 4=silt mixtures 5=sand mixtures 6=sands 7=gravelly sand 
# 8=very stiff sand/clay sand 9=highly overconsolidated fine grained 
sbtn_colours = ['#5E5E56', '#1E1E1C','#AAAA96','#788E6D', 
     '#C6C57D','#FFFC3F', '#AED6F1', '#BA4D2C', '#FF008C'] 
sbtn_labels = ['1', '2', '3', '4', '5', '6', '7', '8', '9'] 
#sbtn_colour_map = dictionary that maps sbtn labels to colours 
sbtn_colour_map = {} 
for ind, label in enumerate(sbtn_labels): 
    sbtn_colour_map[label] = sbtn_colours[ind] 

def label_sbtn(row, labels): 
    return labels[ row['SBTN'] -1] 

data.loc[:,'sbtnLabels'] = data.apply(lambda row: label_sbtn(row, sbtn_labels), axis=1) 

当检查我的数据类型,我可以看到SBTN记录为一个类别:

data.dtypes 
Out[##]: 
BH  category 
MD  float64 
DR  float64 
FM  category 
RHOB  float64 
M_MOD  float64 
PHI  float64 
RES  float64 
SBTN  category 
SU  float64 
VP  float64 
Z   float64 
dtype: object 

是这里的问题,我列SBTN是一类不是一个int?基本上我想为每个SBTN类型使用我的十六进制颜色定义一个颜色映射。在原始的csv文件中,SBTN是一个整数。

完整的错误回溯:

 %run "C:\Users\black\Desktop\Pandas Facies\script1.py" 
--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
C:\Users\black\Desktop\Pandas Facies\script1.py in <module>() 
    25  return labels[ row['SBTN'] -1] 
    26 
---> 27 data.loc[:,'sbtnLabels'] = data.apply(lambda row: label_sbtn(row, sbtn_labels), axis=1) 
    28 
    29 

C:\Users\black\AppData\Local\Enthought\Canopy\User\lib\site-packages\pandas\core\frame.pyc in apply(self, func, axis, broadcast, raw, reduce, args, **kwds) 
    4150      if reduce is None: 
    4151       reduce = True 
-> 4152      return self._apply_standard(f, axis, reduce=reduce) 
    4153    else: 
    4154     return self._apply_broadcast(f, axis) 

C:\Users\black\AppData\Local\Enthought\Canopy\User\lib\site-packages\pandas\core\frame.pyc in _apply_standard(self, func, axis, ignore_failures, reduce) 
    4246    try: 
    4247     for i, v in enumerate(series_gen): 
-> 4248      results[i] = func(v) 
    4249      keys.append(v.name) 
    4250    except Exception as e: 

C:\Users\black\Desktop\Pandas Facies\script1.py in <lambda>(row) 
    25  return labels[ row['SBTN'] -1] 
    26 
---> 27 data.loc[:,'sbtnLabels'] = data.apply(lambda row: label_sbtn(row, sbtn_labels), axis=1) 
    28 
    29 

C:\Users\black\Desktop\Pandas Facies\script1.py in label_sbtn(row, labels) 
    23 
    24 def label_sbtn(row, labels): 
---> 25  return labels[ row['SBTN'] -1] 
    26 
    27 data.loc[:,'sbtnLabels'] = data.apply(lambda row: label_sbtn(row, sbtn_labels), axis=1) 

TypeError: ('list indices must be integers, not float', u'occurred at index 0') 
+2

总是在提问时发布错误的完整追溯。查看错误发生的位置很重要。 –

+0

道歉,现在更新。 –

回答

0

的错误意味着row['SBTN']是一个浮动。将其转换为一个整数,其值为int,即labels[int(row['SBTN']) - 1]。您可能需要确保它是第一个浮点类型的整数,即assert row['SBTN'] == int(row['SBTN'])

+0

是的,它做到了!谢谢 –

相关问题