当熊猫列具有NULL值时,如何将其转换为int?

时间:2019-06-19 10:32:54

标签: python excel pandas csv

所以我正在处理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:以10为底的int()的无效文字:

我再次检查了是否缺少一个单元格,但是我没有错过任何空白单元格,它们在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****

这是发送到上述函数的变量“发送”


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 个答案:

答案 0 :(得分:2)

首先将非数字值(如空字符串)转换为NaN,然后如果可能使用pandas 0.24+,则将列转换为integers

data.word_id = pd.to_numeric(data.word_id, errors='coerce').astype('Int64')

答案 1 :(得分:1)

pd.numeric()函数中有强制性的属性
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)