我正在尝试在数据框和列表上运行scipys hstack方法。为了有效地做到这一点,我必须处理列表中的非数字元素。我想动态地做到这一点(即,我不想编辑正在读取的csv),并且尽可能优雅。
我正在运行的代码如下:
X = list(np.array(p.read_csv('CSVFile.csv', delimiter=";"))[:,2])
OtherColumn = p.read_csv('CSVFile.csv', delimiter=";")[["OtherCol"]]
X = sp.sparse.hstack((X, OtherColumn.values))
错误:
TypeError: no supported conversion for types: (dtype('float64'), dtype('O')
这是因为我的
OtherColumn
列包含“?”有不良数据的字符。我需要的逻辑如下,但是如何在Python中完成呢?抱歉,我是一个初学者,为此做了一些努力!for(i = 0; i< OtherColumn.size; i++)){
try:
X[i] = sp.sparse.hstack((X[i], OtherColumn.values[i]))
except Error:
X[i] = sp.sparse.hstack((X[i], OtherColumn.avg()))
}
用英语,除非出现“?”,否则请运行普通的hstack。 char,然后使用所有OtherColumn值的平均值。
最佳答案
解决此问题的最干净方法可能是指定“?”作为read_csv
中缺少的数据标记:
df = p.read_csv('CSVFile.csv', delimiter=";", na_values=['?'])[["OtherCol"]]
另外,我不明白为什么您需要所有转换为数组和堆栈的操作。为什么不只是将文件读入数据框,然后执行所需的操作呢?看来您只想做
df['NewColumn'] = df.OtherColumn.fillna(df.OtherColumn.mean())
关于python - 优雅地处理非数值元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22272443/