Определение отсутствия значения из столбца

#python #pandas

#python #pandas

Вопрос:

Я читаю csv, используя pandas для выполнения некоторого анализа. Откуда я получаю эту ошибку

 ValueError: could not convert string to float: 'none'
  

Я проверил, я получаю эту ошибку из-за shift_zip параметра. Я вручную перешел к файлу csv и openoffce и преобразовал этот столбец в числовой. Но все равно это выдает эту ошибку.

Данные выглядят следующим образом

введите описание изображения здесь

Я вручную проверил shift_zip столбец, но не могу найти в нем значения none.

Я также попытался напечатать данные этого столбца и его тип данных, который выдает <class int> .

 for val in data['nurse_zip']:
#     print((val))
    if type(val) != 'int':
        print(type((val)))
  

вывод

 <class 'int'>
<class 'int'>
<class 'int'>
  

Как мне правильно определить, какое значение none в этом столбце вызывает эту проблему?

Правка 1: Добавление большего количества кода для лучшего понимания:

 dataset = pd.read_csv("model__newdata.csv",header = 0)


#Data Pre-processing
data = dataset.drop('shift_location_id',1)
data = data.drop('status',1)
data = data.drop('city',1)
data = data.drop('open_positions',1)
# data = data.drop('shift_id',1)
# data = data.drop('role_id',1)
# data = data.drop('specialty_id',1)
# data = data.drop('years_of_experience',1)
# data = data.drop('shifts_zip',1)
# data = data.drop('nurse_zip',1)
# data = data.drop('shift_department_id',1)
# data = data.drop('shift_organization_id',1)
# data = data.drop('user_id',1)


#Find median for features having NaN
median_role_id, median_specialty_id = data['role_id'].median(),data['specialty_id'].median() 
median_shift_id = data['shift_id'].median()
median_specialty_id = data['specialty_id'].median()

data['shift_id'].fillna(median_shift_id, inplace=True)
data['role_id'].fillna(median_role_id, inplace=True)
data['specialty_id'].fillna(median_specialty_id, inplace=True)
data['years_of_experience'].fillna(0, inplace=True)
data['shifts_zip'].fillna(0, inplace=True) #Gives none value error
data['nurse_zip'].fillna(0, inplace=True)
data['shift_department_id'].fillna(0, inplace=True)
data['shift_organization_id'].fillna(0, inplace=True)
data['user_id'].fillna(0, inplace=True)

print (data[data['nurse_zip'] == 'none'])
  

Вывод

 Empty DataFrame
Columns: [shift_id, user_id, shift_organization_id, shift_department_id, role_id, specialty_id, years_of_experience, nurse_zip, shifts_zip]
Index: []
  

Редактировать 1

Результат по ответу jezrael

Это дает False или True в соответствии с условием. Не удается проверить, какая конкретная строка является none или пустой.

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

1. Пожалуйста, вставьте выходные данные data['shifts_zip'].dtypes

2. @hacker315: это дает object

Ответ №1:

Если целью является нахождение значения Na или null, тогда просто используйте

 df.info()
  

и вы сможете увидеть тип данных столбца, а также количество значений None.

Но я думаю, что в вашем наборе данных значение, которое создает шум, не находится в формате null. Вы можете попробовать приведенные ниже пункты. 1: Лучше визуализировать конкретный столбец, используя исторический график или любой другой график.
2: Используйте df[column].astype для принудительного изменения dtype столбца

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

1. это дает AttributeError: 'Series' object has no attribute 'info' , когда я попытался ata['nurse_zip'].info()

2. Использовать data.info () или вы также можете использовать data[‘feature_name’].describe() и предоставить общий доступ к выводам.

Ответ №2:

Вы можете попробовать:

 #check string none
print (data[data['nurse_zip'] == 'none'])

#check non integer values
print (data[data['nurse_zip'].apply(type) != int])

#check strings values
print (data[data['nurse_zip'].apply(type) == str])

#check missing values values
print (data[data['nurse_zip'].isnull()])
  

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

1. @JhonPatric — являются ли данные конфиденциальными?

2. @JhonPatric — Вы тестируете все 3 моих решения?

3. @JhonPatric — Так необходимо ли проверять пропущенные значения? print (data[data['nurse_zip'].isnull()]) ?

4. @JhonPatric — да, но мой код отличается, не print (data['nurse_zip'].isnull()) , а print (data[data['nurse_zip'].isnull()]) — фильтрация по boolean indexing

5. @JhonPatric — Значит, все мои решения возвращают пустой df?