如何规范GeoDataFrame的列中的值

时间:2019-07-08 00:39:15

标签: python-3.x numpy normalization sklearn-pandas geopandas

有两个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.'

1 个答案:

答案 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