使用zip函数将列表按行或列插入dataframe

一、zip函数

zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表对象。在 Python 3.x 中为了减少内存,zip() 返回的是一个对象。如需展示列表,需手动 list() 转换。

如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同。

a = [1, 2, 3, 4]
b = [5, 6, 7, 8]
c = ['a', 'b', 'c', 'd']

zip_ex1 = zip(a, b, c)
print(list(zip_ex1))

返回的结果:

[(1, 5, 'a'), (2, 6, 'b'), (3, 7, 'c'), (4, 8, 'd')]

对打包的元组对象,利用 * 号操作符,可以将元组解压为列表。

print(list(zip(*zip_ex1)))

返回结果:

[(1, 2, 3, 4), (5, 6, 7, 8), ('a', 'b', 'c', 'd')]

二、zip函数在生成dataframe对象中的应用

当需要将多个列表生成一个dataframe对象时,如果每个列表生成一列可以简单使用pd.dataframe生成

a = [1, 2, 3, 4]
b = [5, 6, 7, 8]
c = ['a', 'b', 'c', 'd']

df = pd.DataFrame({'col_a': a, 'col_b': b, 'col_c': c})
print(df)

生成的dataframe对象

   col_a  col_b col_c
0      1      5     a
1      2      6     b
2      3      7     c
3      4      8     d

当每个列表的对应位置的元素作为一列,也就是说每个列表的第一个元素作为一列,第二个元素作为第二列,... 此时可以使用zip函数对列表进行打包然后再解包,就可以实现将列表中的元素按照所在位置重新组合,并生成dataframe

a = [1, 2, 3, 4]
b = [5, 6, 7, 8]
c = ['a', 'b', 'c', 'd']

lt = zip(*zip(a, b, c))
df = pd.DataFrame(lt, columns=['col_a', 'col_b', 'col_c', 'col_d'])
print(df)

生成的dataframe结果:

  col_a col_b col_c col_d
0     1     2     3     4
1     5     6     7     8
2     a     b     c     d

 

posted @ 2022-01-13 17:13  yehaita  阅读(770)  评论(0)    收藏  举报