python - 优雅地处理非数字元素

标签 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 值的平均值。

最佳答案

解决这个问题最简洁的方法可能是指定“?”作为 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/

相关文章:

python - 在 Python 中,如何在排序的日期列表中查找特定日期之间的位置?

python - Pandas .str.replace 不替换表中的所有实例

python - 如何创建 collections.Counter 列表?

python - numpy.unravel_index 不返回预期的行索引

python-3.x - 如何使用高级 bool 索引在 numpy 中分配值?

python - 在这里和那里创建具有大量导入函数的类

python - 使用 Heroku 部署时如何解决 "' django_content_type' does not exit” 错误?

Python For 循环列表有趣的结果

python - 将整数数组转换为 unicode

python - np.solve() 但当 A(第一个矩阵)未知时