有两个shapefile作为GeoDataFrames读入。对于每个gdf中的一列,我需要将值归一化为介于0和1之间。
我尝试使用scaler.fit_transform
函数对值进行规范化,但是关于在2D数组中传递而不是在1D数组中抛出错误。因此,我然后开始尝试(未成功)将列整形(使用np.reshape
),然后归一化。
output = gpd.read_file(r"C:\Users\mrich\OneDrive\GMU\Summer 2019 Comp Migration\output_3_simOutput.shp")
val = gpd.read_file(r"C:\Users\mrich\OneDrive\GMU\CSS 645 (Spring 2019)\Final Project\Other_geo_data\gadm36_TUR_1_val.shp")
# Reshape attributes
output.simEnd = np.reshape(output.simEnd, (928, -1)
val.val_mar19 = np.reshape(val.val_mar19, (928, -1)
# Normalize both actual and predicted REFPOP
scaler = preprocessing.StandardScaler()
scaled_actual = scaler.fit_transform(val.val_mar19)
scaled_predicted = scaler.fit_transform(output.simEnd)
要标准化的两列是simEnd(在输出中)和val_mar19(在val中)。每个中有928个条目。我相信它们可能是GeoSeries。
在重塑行中,Exception: Data must be 1-dimensional
。
另一个错误,但无法确定是否相关:AttributeError: 'Series' object has no attribute 'reshape.'
答案 0 :(得分:0)
没有mcve很难提供更具体的帮助,但是如果我正确理解,这似乎是一个简单的pandas
问题:
df = pd.DataFrame({'x':np.random.rand(20) // .01})
df['x_norm'] = (df['x'] - df['x'].min()) / (df['x'].max() - df['x'].min())
返回
x x_norm
0 38.0 0.426966
1 77.0 0.865169
2 61.0 0.685393
3 48.0 0.539326
4 88.0 0.988764
5 74.0 0.831461
6 49.0 0.550562
7 0.0 0.000000
8 47.0 0.528090
9 60.0 0.674157
10 22.0 0.247191
11 74.0 0.831461
12 34.0 0.382022
13 48.0 0.539326
14 69.0 0.775281
15 3.0 0.033708
16 89.0 1.000000
17 83.0 0.932584
18 57.0 0.640449
19 26.0 0.292135