#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)
? похоже, проблема в функции, и когда вы вызываете ее через dataframemapping(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
.