【发布时间】:2021-04-30 11:54:46
【问题描述】:
我有一个包含两列的数据框,第一列是 id,另一列是数组。此列是一个包含 NaN 值的数组 (ndarray)。 (我已经完成了转换它的第一步,因为它是以字节为单位的。在进行此更改时,列的类型可能是 str。)
terrain['ndvi_matrix'] = np.array(terrain.ndvi_matrix.str.decode('utf-8'))
terrain
terrain_id ndvi_matrix
0 1 [[NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0.3601694...
1 2 [[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN,...
2 3 [[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN,...
3 4 [[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN,...
4 5 [[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN,...
5 6 [[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN,...
6 7 [[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN,...
7 23 [[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN,...
8 27 [[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN,...
9 28 [[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN,...
10 35 [[NaN, NaN, NaN, NaN, NaN, NaN], [0.3127734033...
11 36 [[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN,...
12 42 [[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN,...
13 50 [[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN,...
14 51 [[NaN, 0.18129175946547885, 0.1526586620926243...
15 52 [[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN,...
16 55 [[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN,...
17 56 [[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN,...
18 57 [[NaN, NaN, NaN, NaN, NaN, NaN], [NaN, 0.38725...
19 58 [[NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0.3601694...
20 59 [[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN,...
21 61 [[NaN, NaN, NaN, NaN, NaN, NaN], [NaN, NaN, Na...
22 62 [[NaN, NaN, NaN, NaN, NaN, NaN], [0.0791249233...
23 63 [[NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0.3601694...
24 64 [[NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN,...
25 67 [[NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0.3601694...
26 68 [[NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0.3601694...
27 73 [[NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0.3601694...
28 74 [[NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0.3601694...
29 77 [[NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0.3601694...
30 79 [[NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0.3601694...
31 80 [[NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0.3601694...
terrain.dtypes
terrain_id int64
ndvi_matrix object
dtype: object
我想要的是迭代这些行的值并放置条件。例如,对于大于 0.5 的值,将值更新 0.99。我也遇到了 NaN 的问题,因为当我使用 for 和 iterrows 进行迭代时,它告诉我该列的类型是 str。
我已经尝试过了,但它没有更新数据帧(在这种情况下,我使用 jsonloads 进行编码)
for index, row in terrain.iterrows():
terrain_id = row['terrain_id']
ndvi_matrix = np.array(json.loads(row['ndvi_matrix']))
for col in ndvi_matrix:
for pixel in col:
if pixel > 0.5:
pixel = 0.99
elif 0.2 < pixel < 0.5:
Fc = ((pixel - 0.2) ** 2)/0.09
pixel = Fc
elif pixel < 0.2:
pixel = 0.944
else:
pixel = 'nan'
print(pixel)
示例:
array(['[[NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0.3601694915254237, 0.3121476166068683, 0.43469446857804805, 0.35864022662889516, NaN, NaN], [NaN, NaN, NaN, 0.39893805309734515, 0.5044690740078656, 0.5433070866141733, 0.5176265270506109, 0.4300861497680583, 0.31038343129023227, 0.41292379020573744, 0.4365527488855869, NaN, NaN], [NaN, NaN, NaN, 0.5380281690140845, 0.5721357850070722, 0.5886981402002861, 0.5908611599297012, 0.6074124914207275, 0.6179540709812108, 0.6184530003468609, 0.6147846727704307, 0.5858347386172007, NaN], [NaN, NaN, NaN, 0.605643994211288, 0.613724796604174, 0.6004250797024442, 0.603299856527977, 0.609429978888107, 0.6084546084546084, 0.626489138051857, 0.6185567010309279, 0.5827633378932968, NaN], [NaN, NaN, 0.6287215411558669, 0.6118980169971672, 0.6051532033426184, 0.6032303370786517, 0.6175839885632595, 0.6167146974063401, 0.6188786373314408, 0.628808864265928, 0.6193103448275862, 0.5957671957671957, NaN], [NaN, NaN, 0.6093189964157706, 0.5889921372408864, 0.5956552207428171, 0.608649415101028, 0.6209705986539142, 0.6205533596837944, 0.6292857142857143, 0.6296036478428622, 0.6120659417748159, 0.5862311204776958, NaN], [NaN, NaN, 0.59375, 0.5653429602888087, 0.589817138759412, 0.5995694294940797, 0.607563325008919, 0.6096333572969087, 0.6217345872518286, 0.6243441762854145, 0.6021390374331551, 0.6045118082481494, NaN], [NaN, NaN, 0.5848920863309353, 0.5734011627906976, 0.6040100250626567, 0.6092691622103387, 0.6002865329512894, 0.582879941965905, 0.5781518378564068, 0.6072676450034941, 0.5981375358166189, 0.6016771488469602, NaN], [NaN, 0.5665236051502146, 0.5756026296566837, 0.5879140880961048, 0.615983026874116, 0.6137339055793991, 0.5862068965517241, 0.5815808556925308, 0.585934696806602, 0.5968034871049764, 0.5933789132781576, 0.5913073957237995, NaN], [NaN, 0.5614353026458861, 0.582338038364097, 0.5881929445644348, 0.6124737210932025, 0.606952820148989, 0.573746844572665, 0.6049733570159858, 0.6176678445229682, 0.6090491339696006, 0.6205092431112661, 0.6100981767180925, NaN], [NaN, 0.5616045845272206, 0.5915744377008212, 0.5772870662460567, 0.5922535211267606, 0.5998591053187742, 0.5921513665031535, 0.6301703163017032, 0.6083421703782255, 0.6028169014084507, 0.6353629170966633, 0.6252602359472589, NaN], [NaN, 0.5752895752895753, 0.6055944055944056, 0.5848400556328234, 0.587513153279551, 0.6028169014084507, 0.6085902320748181, 0.6206185567010309, 0.6098591549295774, 0.5980528511821975, 0.6147994467496543, 0.6101283385362469, NaN], [NaN, 0.6063756063756064, 0.6014735432016075, 0.5934178950977032, 0.6148300720906282, 0.5845942228335625, 0.5820486467968482, 0.6119917298414886, 0.5669050051072523, 0.5611390284757118, 0.5912897822445561, 0.564563582870219, NaN], [0.4517675254643499, 0.4760514018691589, 0.4551226551226551, 0.414577931431864, 0.4381895332390382, 0.42126436781609194, 0.3607280750137893, 0.3523246439129266, 0.3677453864669698, 0.3598930481283422, 0.34667359667359665, 0.3580502981591911, NaN], [NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN]]'],
dtype=object)
【问题讨论】:
-
ndvi_matrix是字符串还是numpy数组? -
我转换为 np.array 但我不知道它是如何获得 NaN 值的,我猜是 str 格式
-
您的输入数据不可用。复制/粘贴一个完整的原始字符串。我们无法猜测每一行的形状。
-
我已经用一个例子编辑了这个问题
-
解码前能不能有原来的
terrain['ndvi_matrix']?