Как преобразовать столбец panda в int, если он имеет значения NULL? - PullRequest
0 голосов
/ 19 июня 2019

, поэтому я работаю над своим CSV-файлом, в котором после каждого предложения есть пустая ячейка "", как показано на рисунке ниже.

когда я печатаю тип столбцов, используя:

print(data.dtypes)

Я понял, что все они являются объектами, однако я хочу, чтобы столбцы word_id, head_pred_id, sent_id и run_id были int64.

когда я конвертирую тип данных столбца, используя:

data.word_id = data.word_id.astype(int)

Я получаю ошибку: недопустимый литерал для int () с основанием 10: ''

Поэтому я подумал, что проблема заключается в пустых ячейках, поэтому я заменил их в самом файле CSV на NULL.

Теперь тип 4 столбцов автоматически устанавливается на «Float64», однако, когда я что-то выполняю с ними, я получаю ту же ошибку: ValueError: недопустимый литерал для int () с основанием 10: ''

Я дважды проверил, есть ли пропущенная ячейка, но я не пропустил ни одной, все пустые ячейки в моем файле CSV имеют значение NULL.

Ниже приведен фрагмент кода, где появляется ошибка:

def encode_inputs(sents):
        """
        Given a dataframe which is already split to sentences,
        encode inputs for rnn classification.
        Should return a dictionary of sequences of sample of length maxlen.
        """
        word_inputs = []
        pred_inputs = []
        pos_inputs = []


        assert(all([len(set(sent.run_id.values)) == 1
                    for sent in sents]))


        run_id_to_pred = dict([(int(sent.run_id.values[0]),
                                get_head_pred_word(sent))
                               for sent in sents]) ***ERROR HERE****

и это переменная "sents", отправленная вышеупомянутой функции


def get_sents_from_df( df):

      #Split a data frame by rows accroding to the sentences
      return [df[df.run_id == run_id]
            for run_id
            in sorted(set(df.run_id.values))]

Snippet of my CSV File

Ответы [ 2 ]

2 голосов
/ 19 июня 2019

Сначала преобразуйте нечисловые значения (например, пустые строки) в NaN с, а затем, если возможно использование панд 0,24+, можно преобразовать столбец в целые числа :

data.word_id = pd.to_numeric(data.word_id, errors='coerce').astype('Int64')
1 голос
/ 19 июня 2019

В функции pd.numeric () есть свойство coerce
data['word_id']= pd.to_numeric(data['word_id'], errors='coerce').astype(int)

в случае нескольких столбцов
1. создать список столбцов
col =['word_id','head_pred_id']
df[col] = df[col].apply(lambda x :pd.to_numeric(x,errors='coerce').astype(int),axis=0)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...