首页 > 解决方案 > 从列表列表中提取列表并将它们分配到python中的列中

问题描述

我有一个数据集(df_norm),其中有一列“geometry.coordinates”,其中包含一个列表(l1)作为它的值:

    geometry.coordinates        
0   [[[23.514690935490876, 53.946715071429367], [2...
1   [[[23.549827385369554, 53.942282407709513], [2...
2   [[[23.574999999999307, 53.941666666666151], [2...

我需要从每个列表中提取单个坐标并将每个坐标分配到一个单独的列中,以获得类似于此的输出:

    longitude1              latitude1       longitude2             latitude2            ...
    23.514690935490876  53.946715071429367   23.5127605166679412   53.961345695020002
    23.549827385369554  53.942282407709513   23.6123409888603434   53.941666666666151
    ....

我的代码是:

    def flatten_list(l1):
        flat_list = []
        for sublist in df_norm['geometry.coordinates'][0]:
            for item in sublist:
                flat_list.append(item)
        return flat_list

     for i in range(len(df_norm['geometry.coordinates'])):
         for j in df_norm['geometry.coordinates']:
             flatten_list(df_norm['geometry.coordinates'])
             var1 = flat_list[i][0]
             var2 = flat_list[i][1]
             var3 = flat_list[i][2]
             var4 = flat_list[i][3]
             var5 = flat_list[i][4]

我收到一个错误:

  IndexError: list index out of range

我究竟做错了什么?

标签: python-3.xlistiteration

解决方案


似乎您的flatten_list()函数会生成一个包含所有值的单个未嵌套列表。但是,当您索引列表以分配变量时,您使用的是嵌套表示法flat_list[i][0]。为了将新列表中的值分配flatten_list()给相应的变量,请尝试更改索引,如下所示:

for i in range(len(df_norm['geometry.coordinates'])):
         for j in df_norm['geometry.coordinates']:
             flatten_list(df_norm['geometry.coordinates'])
             var1 = flat_list[i]
             var2 = flat_list[i+1]
             var3 = flat_list[i+2]
             var4 = flat_list[i+3]
             var5 = flat_list[i+4]

此外,如果我正确理解您的目标,您希望在每个变量名下生成列表。照原样,循环将替换这些值,并且只保留最后 5 个值(每个变量一个)。也许为循环外的每个变量生成列表并附加值会是更好的方法?range()最后 -可能需要更改您的参数。否则,随着临时变量的进行,对应于一个变量的重复值将被放入错误的变量中i

var1 = []
var2 = []
var3 = []
var4 = []
var5 = []
for i in range(0,len(df_norm['geometry.coordinates'],5)):
         for j in df_norm['geometry.coordinates']:
             flatten_list(df_norm['geometry.coordinates'])
             var1.append(flat_list[i])
             var2.append(flat_list[i+1])
             var3.append(flat_list[i+2])
             var4.append(flat_list[i+3])
             var5.append(flat_list[i+4])

推荐阅读