我想知道当从一个给定的(csv)文件加载数据时,如何用多列替换特定的值,将字符串和数值结合起来。你知道吗
在下面的示例中,假设您有许多地理位置,具有已知的纬度和经度,以及一组特定的属性(P1-P5)和一个类(仅包括问题的字符串部分)。有些缺少的值被genfromtxt正确替换(本例中缺少的值是-999),另外还有一些不正确的值(假,或其他类型的标志),如0.0。如何将0.0替换为-999?你知道吗
数据:
Name,lat,long,P1,P2,P3,P4,P5,Class
id1,71.234,10.123,0.0,11,212,222,1920,A
id2,72.234,11.111,,,312,342,1920,A
id3,77.832,12.111,1,0.0,,333,4520,B
id4,77.987,12.345,3,0.0,,231,2020,B
id5,77.111,13.099,5,11,212,222,1920,A
目前为止的代码是:
dfile = "data.csv"
missing_value = -999
import numpy as np
data = np.genfromtxt(dfile, unpack=True, comments='#', names=True,
autostrip='Yes', filling_values=missing_value,
dtype=('S5', 'float', 'float', 'float', 'float', 'float', 'float', 'S1')
, delimiter=',',
)
new_data = np.where(data!=0.0 ,data, -999)
我使用了np.where(数据!=0.0,data,-999),但我得到了一个错误:TypeError: invalid type promotion
我不知道我错过了什么。。。你知道吗
第1页。也许这是解决熊猫,但我正在寻找一个独立的解决方案
第2页。我知道一个棘手的解决方法是将不正确的值(0.0s)设置为初始文件中缺少的标志,但是我们要排除的多个值是什么?(或组合具有不同标志的数据)
定义简单文本:
加载
genfromtxt
:请注意具有不同数据类型和名称的数据类型字段。你知道吗
按名称访问字段:
按索引修改一个字段:
用布尔测试(或
where
)修改另一个:如果将数字字段分组为一个字段,则替换可能更容易(但这需要更多地了解结构化数组数据类型):
在我看来,问题在于np.genfromtxt文件部分。它创建一个numpy数组,其形式如下:
这导致了np.哪里失败。解决这个问题的一种方法是:
我认为这不是一个很好的解决方案。但在有人给出真正的答案之前,它应该是有效的。
相关问题 更多 >
编程相关推荐