我是python的新手,但我想用python从文件中读取一些数据。我的问题是数据中有NaN值,我无法删除它们。用零替换它们也是一个想法。
我的数据如下:
>>> data
array(['123.6', 'NaN' , '124.5' , '8463.9' , .... , '764.8'],
['NaN', '763.9', ..., 'NaN'] , dtype=object]
我用numpy数组创建了它。我的目标是在没有NaN值的情况下改造np.float
。因此我认为用np.isnan(data)
创建一个掩码是个好主意,但我得到以下错误
TypeError:ufunc' isnan'不支持输入类型,并且根据投射规则无法安全地将输入强制转换为任何支持的类型'''
然后我还有另一个想法如何解决这个问题。我考虑过使用np.setdiff1d(data,NaN)
函数,因此我想用NaN-Values创建一个数组:
>>> NaN = np.array([NaN, NaN])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'NaN' is not defined
但我没有让它成功运作。
任何想法如何解决这个问题?
编辑I:
如果您想重新创建我的问题: - 我在评论结尾给你数据。 - 我的整个代码:
file = open('data.txt','r')
data = [ ]
for line in (x for x in file if not (x.startswith('#'))):
line = line.strip().split(' ')
data.append(line)
data = np.array(data)
此代码有效。但是,如果我尝试下一步data = data.astype(np.float)
,由于NaN值,它不起作用。
我原始数据的一部分,我保存为.txt
文件。
1564.5 927.5 -33.217633987949434 -75.28690848012765 0.8646 0.8654 0.8041 0.8399 0.816 0.8157 0.8005 0.7783 0.7758 0.3526 0.0023 0.0513 0.0507 9.591876 121.94432 63.2077 64.7261 9.68262 118.91 9.48605 126.374 9.51632 124.666 9.55169 123.097 9.57373 122.254 9.59818 121.403 9.62448 120.563 9.50012 125.52 9.65311 119.719 9.71611 118.056 9.53956 123.598 9.59347 121.561 9.65895 119.555
1565.5 927.5 -33.215517631467705 -75.28691044613586 0.8538 0.8055 0.7497 0.7763 0.7828 0.785 0.7782 0.73 0.7504 0.3455 0.0021 0.0493 0.0478 9.591876 121.94432 63.2077 64.7261 9.68262 118.91 9.48605 126.374 9.51632 124.666 9.55169 123.097 9.57373 122.254 9.59818 121.403 9.62448 120.563 9.50012 125.52 9.65311 119.719 9.71611 118.056 9.53956 123.598 9.59347 121.561 9.65895 119.555
1566.5 927.5 -33.213401274416846 -75.28691239293255 0.8768 0.8702 0.7963 0.8287 0.8233 0.8209 0.7982 0.7617 0.7737 0.3599 0.002 0.0469 0.0512 9.591876 121.94432 63.2077 64.7261 9.68262 118.91 9.48605 126.374 9.51632 124.666 9.55169 123.097 9.57373 122.254 9.59818 121.403 9.62448 120.563 9.50012 125.52 9.65311 119.719 9.71611 118.056 9.53956 123.598 9.59347 121.561 9.65895 119.555
1488.5 928.5 -33.378488511902496 -75.28724058707648 0.8861 0.8839 0.8238 0.8425 0.8199 0.8224 0.8003 0.7847 0.7765 0.3624 0.0023 0.0561 0.0597 NaN NaN 63.2476 64.9044 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1489.5 928.5 -33.37637213942188 -75.28724401326073 0.8813 0.8479 0.7873 0.8153 0.8422 0.8334 0.8146 0.7521 0.79 0.3608 0.0021 0.0572 0.0584 NaN NaN 63.2476 64.9044 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1490.5 928.5 -33.374255765947325 -75.2872474202336 0.884 0.8697 0.8102 0.845 0.8455 0.8415 0.8285 0.7883 0.7974 0.359 0.0023 0.0554 0.0576 NaN NaN 63.2476 64.9044 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1491.5 928.5 -33.37213939148442 -75.28725080799506 0.8901 0.8802 0.8183 0.856 0.8566 0.8435 0.8285 0.7786 0.804 0.3601 0.0024 0.0553 0.057 NaN NaN 63.2476 64.9044 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1492.5 928.5 -33.370023016038736 -75.28725417654512 0.8815 0.8607 0.8006 0.8368 0.8314 0.8275 0.8135 0.771 0.7865 0.3536 0.0023 0.0541 0.055 NaN NaN 63.2476 64.9044 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1493.5 928.5 -33.367906639615875 -75.28725752588373 0.8751 0.8435 0.7843 0.8148 0.8174 0.8144 0.8019 0.7449 0.7686 0.3536 0.0023 0.052 0.0538 NaN NaN 63.2476 64.9044 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1494.5 928.5 -33.36579026222143 -75.28726085601092 0.8719 0.8724 0.8177 0.8545 0.8387 0.8299 0.8211 0.7898 0.793 0.3545 0.0023 0.055 0.0586 NaN NaN 63.2476 64.9044 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1495.5 928.5 -33.363673883860976 -75.28726416692662 0.8701 0.8694 0.8039 0.8428 0.8347 0.835 0.8166 0.7782 0.7856 0.3534 0.002 0.0543 0.0546 NaN NaN 63.2476 64.9044 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1496.5 928.5 -33.36155750454011 -75.28726745863086 0.8688 0.8537 0.7963 0.8333 0.825 0.829 0.81 0.7709 0.7784 0.3479 0.0019 0.0525 0.0546 NaN NaN 63.2476 64.9044 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1497.5 928.5 -33.35944112426442 -75.28727073112363 0.8548 0.8283 0.7676 0.8069 0.8027 0.7961 0.7849 0.738 0.7596 0.3399 0.002 0.0513 0.0511 NaN NaN 63.2476 64.9044 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1498.5 928.5 -33.35732474303949 -75.28727398440489 0.8691 0.828 0.7659 0.8038 0.8106 0.7977 0.7894 0.7406 0.7664 0.3452 0.0022 0.0506 0.0502 NaN NaN 63.2476 64.9044 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1499.5 928.5 -33.35520836087091 -75.28727721847463 0.8878 0.8503 0.7941 0.8226 0.8437 0.8301 0.8254 0.7611 0.791 0.3579 0.0021 0.0533 0.0563 NaN NaN 63.2476 64.9044 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
1500.5 928.5 -33.35309197776428 -75.28728043333282 0.8974 0.8695 0.8044 0.8397 0.8516 0.8445 0.8307 0.7854 0.8033 0.3628 0.0023 0.0575 0.0592 9.591876 121.94432 63.2077 64.7261 9.68262 118.91 9.48605 126.374 9.51632 124.666 9.55169 123.097 9.57373 122.254 9.59818 121.403 9.62448 120.563 9.50012 125.52 9.65311 119.719 9.71611 118.056 9.53956 123.598 9.59347 121.561 9.65895 119.555
1501.5 928.5 -33.350975593725174 -75.28728362897951 0.8998 0.877 0.8148 0.8441 0.8492 0.84 0.8154 0.7692 0.7918 0.3604 0.0021 0.0515 0.0525 9.591876 121.94432 63.2077 64.7261 9.68262 118.91 9.48605 126.374 9.51632 124.666 9.55169 123.097 9.57373 122.254 9.59818 121.403 9.62448 120.563 9.50012 125.52 9.65311 119.719 9.71611 118.056 9.53956 123.598 9.59347 121.561 9.65895 119.555
1502.5 928.5 -33.34885920875918 -75.28728680541461 0.9023 0.8761 0.8141 0.8487 0.8483 0.8415 0.8216 0.7694 0.7926 0.3603 0.002 0.0526 0.0552 9.591876 121.94432 63.2077 64.7261 9.68262 118.91 9.48605 126.374 9.51632 124.666 9.55169 123.097 9.57373 122.254 9.59818 121.403 9.62448 120.563 9.50012 125.52 9.65311 119.719 9.71611 118.056 9.53956 123.598 9.59347 121.561 9.65895 119.555
答案 0 :(得分:2)
"NaN"
是一个字符串,这就是Numpy的意思。如果你想拥有一个真正的nan对象,你应该使用np.nan
(numpy将其表示为nan
)。此外,np.isnan()
不会对类型为object的数组说明:
In [16]: data = np.array([1, 3])
In [17]: np.isnan(data)
Out[17]: array([False, False], dtype=bool)
In [18]: data = np.array([1, 3, 'NaN'])
In [19]: np.isnan(data)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-19-0b9ec100cedb> in <module>()
----> 1 np.isnan(data)
TypeError: ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''
In [20]: data = np.array([1, 3, np.nan])
In [21]: np.isnan(data)
Out[21]: array([False, False, True], dtype=bool)
答案 1 :(得分:1)
试试这个:
data = np.where(data == `NaN`, np.nan, data.astype(float))
甚至
data = data.astype(float)
然后你可以使用你的其他功能。
测试:
a=np.array([['1.2','NaN'],['NaN','4.5']], dtype='object')
a
Out[347]:
array([['1.2', 'NaN'],
['NaN', '4.5']], dtype=object)
a.astype(float)
Out[348]:
array([[ 1.2, nan],
[ nan, 4.5]])
尝试复制错误:
a=np.array([['1.2','NaN'],['NaN','4.5','NaN']], dtype='object')
a
Out[350]: array([['1.2', 'NaN'], ['NaN', '4.5', 'NaN']], dtype=object)
a.astype(float)
Traceback (most recent call last):
a.astype(float)
ValueError: setting an array element with a sequence.
答案 2 :(得分:0)
您有一系列字符串列表。尝试施放以漂浮。
for i,row in enumerate(data):
for j,x in enumerate(row):
data[i][j]=float(x)