2015-07-16 5 views
0

Я пытаюсь работать со сценарием, написанным коллегой.AttributeError: объект 'Series' не имеет атрибутов 'items'

Эта часть сценария работает отлично:

xl = pd.ExcelFile(path + WQ_file) 
sheet_names = xl.sheet_names 

df = pd.read_excel(path + WQ_file, sheetname = 'Chemistry Output Table', skiprows = [0,1,2,4,5,6,7], 
       index_col = [0,1], na_values = ['', 'na', '-']) 
df.index.names = ['Field_ID', 'Date_Time'] 

header = pd.read_excel(path + WQ_file, sheetname = 'header data', 
       index_col = [0], na_values = ['', 'na', ' - ']) 
header_dict = {ah: header['name_short'].loc[ah] for ah in header.index} 

analytes_excel = pd.read_excel(path + WQ_file, sheetname = 'analytes', columns = 'name') 
analytes_list = [item for sublist in analytes_excel.values.tolist() for item in sublist] 
analytes = [header['name_short'].loc[x] for x in analytes_list]  

Но эта часть не является:

# Clean up the data and report "less than" as half of the LOR 
df2 = df.copy() 
for col in df2.columns: 
x = [] 
for (a, b) in df2[col].items(): 
    if b == " - ": 
     b = np.nan 
    try: 
     b = float(b) 
    except: 
     b = float(b.strip('< '))/2 
    x.append(b) 
df2[col] = x 

Я получаю следующее сообщение об ошибке:

--------------------------------------------------------------------------- 
AttributeError       Traceback (most recent call last) 
<ipython-input-4-80ad8c096fc0> in <module>() 
    4 for col in df2.columns: 
    5  x = [] 
----> 6  for (a, b) in df2[col].items(): 
    7   if b == " - ": 
    8    b = np.nan 

C:\Users\SardellaC\AppData\Local\Continuum\Anaconda\lib\site-packages\pandas\core\generic.pyc in __getattr__(self, name) 
1938 
1939   if name in self._internal_names_set: 
-> 1940    return object.__getattribute__(self, name) 
1941   elif name in self._metadata: 
1942    return object.__getattribute__(self, name) 

AttributeError: 'Series' object has no attribute 'items' 

Это может быть что-то делать с различными версиями Python. Я вообще не знаком с Python и буду признателен, если кто-то может указать мне в правильном направлении.

+0

df2 [Col] выглядит следующим образом: –

+0

FIELD_ID DATE_TIME AST2 2014-12-29 00:00:00 2,3 2014-12-29 12:00:00 NaN 2015-01-12 00:00:00 3.2 2015-01-12 15:00:00 NaN 2015-01-28 00:00:00 2.8 2015-01-28 12:15:00 NaN 2015-01-28 12:30:00 NaN 2015-02-02 00:00:00 2.7 2015-02-02 11:30:00 NaN 2015-02-03 00:00:00 2.7 –

ответ

2

Использование iteritems() вместо items() во время прохода через ряд панд в

for (a, b) in df2[col].iteritems(): 
    x = [] 
    .... 

Но перебор каждой строки очень медленный процесс для большого набора данных. Вы можете просто использовать эту часть кода, используя функцию .apply(). Дайте мне знать, если вам нужно упростить код.

+0

Это прекрасно работает @ Катирмани Сукумар. Спасибо за вашу помощь! –