AttributeError: объект «Серия» не имеет атрибута «элементы»

Я пытаюсь работать со сценарием, который написал коллега.

Эта часть скрипта работает нормально:

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 и был бы признателен, если бы кто-нибудь указал мне правильное направление.


person Carolina S    schedule 16.07.2015    source источник
comment
df2[col] выглядит так:   -  person Carolina S    schedule 16.07.2015
comment
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 28-01-2015 12:30:00 NaN 02-02-2015 00:00:00 2.7 2015-02-02 11:30: 00 НаН 03.02.2015 00:00:00 2.7   -  person Carolina S    schedule 16.07.2015


Ответы (1)


Используйте iteritems() вместо items() при повторении серии панд как

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

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

person Kathirmani Sukumar    schedule 17.07.2015
comment
Это отлично работает @Kathirmani Sukumar. Спасибо за вашу помощь! - person Carolina S; 20.07.2015