Numpy:读取csv,处理未定义的值

时间:2016-10-12 23:56:37

标签: python csv numpy

当某些值标记为“未定义”时,将数据从csv文件读取到numpy数组的最佳方法是什么:

0.231620,0.00001,444.157
0.225370,--undefined--,1914.637
0.237870,0.0003,--undefined--

我有很多这些文件需要循环,可以假定未定义的值应为零。

3 个答案:

答案 0 :(得分:1)

要读取CSV文件并以最佳方式替换值,我认为它使用的是使用numpy的Pandas

import pandas as pd

df = pd.read_csv('foo.csv', header=None)
df.replace("--undefined--", 0.0, inplace=True)
df

         0        1         2
0  0.23162  0.00001   444.157
1  0.22537        0  1914.637
2  0.23787   0.0003         0

答案 1 :(得分:0)

我建议你尝试将你读取的每个值转换为float,然后捕获类型转换ValueError异常并在异常处理程序中将其赋值为零。

这将是最蟒蛇的方式

假设您的CSV包含浮点值,您应该以:

结尾
ExecutionContext

或者,只有' - undefined - '字符串要处理为' 0.0',您可以像(最里面的循环)一样编写

with open('data.csv', 'r') as fd:
    # iterate over all lines in csv
    for line in fd:
        # split and iterate over values in line, maintaining item index
        for i, value in enumerate(line.split(',')):
            try:
                value = float(value)
            except ValueError:
                # consider undefined/non-float value equals to 0
                value = 0.0
            # store parsed value wherever you need it
            print('value[%d] = %f' % (i, value))

答案 2 :(得分:0)

不需要Pandas,只需使用Numpy。

import numpy as np
x = np.genfromtxt('data.csv', dtype=np.float, delimiter=',',
    missing_values='--undefined--', filling_values=0.0,
    )