为什么nympy.nanmin()找不到正确的值

时间:2017-04-01 08:29:18

标签: python csv pandas numpy

我在Pandas和/或NumPy遇到了一些奇怪的举动,请你帮忙找出我的错误?

我从file读取数据,然后用np.nan替换所有非数字元素,然后使用np.nanmin()np.nanmax()计算最大值和最小值。这些值是nan,尽管列中有一些浮点数。

我发现有两点:

1)当列的最后一个元素是float(以另一种方式,np.nanmin(df.iloc[:cnt_row,cnt_col])指向float元素)时,如果我在交互模式下使用cnt_row - 1得到最小值,则该函数返回一个正确的值值。但是如果在范围的末尾有nan,则函数返回nan,尽管以前的位置有浮点数。

2)当我将包含已替换文本值的DataFrame保存到新的csv文件并再次阅读时,np.nanminnanmax工作正常。 这是我使用的代码:

def is_digit(val):
    if type(val) == str:
        val = val.replace(',', '.')
    try:
        return not math.isnan(float(val))
    except:
        return False

path = "C:/test/deposits1.csv"
df = pd.read_csv(path, sep=';', header=0)
rows_num = len(df.iloc[:, 0])
cols_num = len(df.columns)
cnt_row = 0
cnt_col = 0
for cnt_col in range(cols_num):
    # remove text from columns containing digits
    for cnt_row in range(0, rows_num):
        if not is_digit(df.iloc[cnt_row, cnt_col]):
            df.iloc[cnt_row, cnt_col] = np.nan
        else:
            val = df.iloc[cnt_row, cnt_col]
            if type(val) == str:
                val = val.replace(',', '.')
            df.iloc[cnt_row, cnt_col] = float(val)       

    min_val = None
    max_val = None    
    try:
        min_val = np.nanmin(df.iloc[:, cnt_col].values)
        max_val = np.nanmax(df.iloc[:, cnt_col].values)
    except: pass

Thnx提前!

0 个答案:

没有答案