Python не приравнивает пустую ячейку к «»

#python #pandas

Вопрос:

Питон нуб здесь. Я работаю над проектом и получаю некоторые странные результаты. Мне удалось воспроизвести результаты в небольшом примере. Я сохранил следующее в Excel в виде csv-файла:

 var 1,var 2
20,a
10,a
,a
5,a
4,a
0,a
1,a
21,a
 

Я пытаюсь подсчитать, сколько пустых фрагментов данных (т. е. 1)

 test = pd.read_csv("test.csv")
print(test[test["var 1"]==""].count())
test["var 1"].replace("", "Unknown", inplace=True) 
print(test[test["var 1"]==""].count())
print(test[test["var 1"]=="Unknown"].count())
print(test[test["var 1"]== 0].count()) 
 

Результат таков:

 var 1    0
var 2    0
dtype: int64
var 1    0
var 2    0
dtype: int64
var 1    0
var 2    0
dtype: int64
var 1    1
var 2    1
dtype: int64
 

Поэтому по какой-то причине Python не считает пустые данные «». Затем я использую следующий код для отправки данных обратно в новый csv-файл в надежде, что смогу узнать, как на них ссылаться.

csv, который я получаю, отображается как:

 var 1
20.0
10.0
""
5.0
4.0
0.0
1.0
21.0
 

Как вы можете видеть, данные отправляются обратно как «». Я пытаюсь выполнять задачи, основанные на условии, что данные==»», но, очевидно, не могу, так как данные не хранятся как «». Кто-нибудь знает, как хранятся данные?

Мы ценим любую помощь,

C.

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

1.Вы можете просто print(test) посмотреть, что используется вместо пустой строки "" во фрейме данных.

2. Спасатель XD. По какой-то причине он хранится как NaN!

3. Отсутствующие данные в панд представлены NaN . См. раздел Работа с недостающими данными

4. @Charmalade, смотрите описание na_values по причине: pandas.pydata.org/pandas-docs/stable/reference/api/…

5. NaN не будет равнозначно NaN тому, что является частью определения. Существует метод isna() , который сообщит вам, содержит ли продажа NaN или нет. df['var 1'].isna().sum() может использоваться для «подсчета» количества истин.

Ответ №1:

Данные хранятся в виде нулевого значения или np.nan . Смотрите выходные данные тестового фрейма данных при загрузке:

 test = pd.read_csv("test.csv")

    var 1   var 2
0   20.0    a
1   10.0    a
2   NaN     a
3   5.0     a
4   4.0     a
5   0.0     a
6   1.0     a
7   21.0    a
 

Когда вы это сделаете .to_csv() , нулевые значения станут «» в Excel

Поэтому ваш код должен быть:

 test = pd.read_csv("test.csv")
print(test[test["var 1"].isna()].count())
test["var 1"].replace(np.nan, "Unknown", inplace=True) 
print(test[test["var 1"].isna()].count())
print(test[test["var 1"]=="Unknown"].count())
print(test[test["var 1"]== 0].count()) 

var 1    0
var 2    1
dtype: int64
var 1    0
var 2    0
dtype: int64
var 1    1
var 2    1
dtype: int64
var 1    1
var 2    1
dtype: int64
 

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

1. @Charmalade не могли бы вы помочь озвучить мой ответ, пожалуйста? 🙂