所以我正在处理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))]
答案 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)