优雅地处理非数字元素

时间:2014-03-08 17:14:28

标签: python python-2.7 numpy pandas scipy

我正在尝试在数据框和列表上运行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值的平均值。

1 个答案:

答案 0 :(得分:3)

解决这个问题最简单的方法可能是指定“?”作为read_csv中缺少的数据标记:

df = p.read_csv('CSVFile.csv', delimiter=";", na_values=['?'])[["OtherCol"]]

另外,我不明白为什么你需要所有转换到数组和堆叠。为什么不将文件读入数据帧然后进行所需的操作?看起来你只想做

df['NewColumn'] = df.OtherColumn.fillna(df.OtherColumn.mean())