Как исправить ошибку атрибута: объект ‘NoneType’ не имеет атрибута ‘loc’ (Pandas)?

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

#python #python-3.x #pandas #фрейм данных #numpy

Вопрос:

У меня есть скрипт pandas.

 import pandas as pd

data = pd.read_csv('sample.csv',delimiter=',')

def mapping(df):
     #work of data mapping
     for column_name, column in df.transpose().iterrows():
         df.rename(columns ={'first name' : 'FNAME', 'secret': 'CODE'}, inplace = True)
         df.rename(columns ={'alias' : 'FNAME', 'code': 'CODE'}, inplace = True)
         df.rename(columns ={'initial name' : 'FNAME', 'id': 'CODE'}, inplace = True)

final_df = mapping(data)

#If the code is greater than 12 digits, leave it blank
final_df.loc[final_df['CODE'].astype(str).str.len() >12, 'CODE']= ''
 

Я получаю ошибку как :

 final_df.loc[final_df['CODE'].astype(str).str.len() >12, 'CODE']= ''
AttributeError: 'NoneType' object has no attribute 'loc'
 

Какие-либо исправления для этого?

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

1. проверка type(final_df) ? похоже, проблема в функции, и когда вы вызываете ее через dataframe mapping(data) , возвращается None ?

2. когда я возвращаю только сопоставление (данные), он отображает данные, но когда final_df = сопоставление (данные) ,печать (final_df), он возвращает None

3. Что является результатом print(type(mapping(data))) ?

4. результат NoneType @anky

5. удалите inplace=True из каждой строки. Измените df.rename(columns ={'first name' : 'FNAME', 'secret': 'CODE'}, inplace = True) , чтобы df=df.rename(columns ={'first name' : 'FNAME', 'secret': 'CODE'}) сделать это для всех 3 строк (хотя вы можете объединить все переименования вместе в одном словаре) и добавить return df к последней строке функции.

Ответ №1:

Ваша mapping функция ничего не возвращает. Поэтому, когда вы назначаете его final_df , ему ничего не будет присвоено None .

Вы должны добавить return df к последней строке своей функции, чтобы получить то, что вы хотите.

Ответ №2:

Это означает, что final_df переменная является None (функция, приведенная выше, фактически возвращает None , а объект None действительно не имеет этого атрибута loc .

Убедитесь, что эта функция mapping возвращает объект, который вы действительно хотите вернуть.

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

1. когда я возвращаю только сопоставление (данные), он отображает данные, но когда final_df = сопоставление (данные) ,печать (final_df), он возвращает None

2. Ваше сопоставление функций должно возвращать фактический объект, который вы только что изменили, в противном случае функция без оператора return возвращает по умолчанию None .