看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
本需求是将一个长数据,按照分段规则转换成一个多列的数据,同时,将第一段作为这个数据的表头。这种需求在我们的日常数据需求中也会遇到。比如,有一个长队,大家排成一列纵队,各小组的小组长们全部站在前边,这时要求大家变成多个纵队形成方阵,小组长就在最前边了。
本案例的需求数据示例如下:
import pandas as pd
import numpy as np
df = pd.DataFrame({'x': list('abc')+list('123456')})
df
'''
x
0 a
1 b
2 c
3 1
4 2
5 3
6 4
7 5
8 6
'''
需要将每三个形成一行,第一组的三个为表头。
数据指定形状变形的功能 Pandas 没有,需要借助 NumPy 的 reshape 来实现,要用 NumPy 的功能需要先将数据转为 ndarray:
arr = np.reshape(df.x.to_numpy(), (3,3))
arr
'''
array([['a', 'b', 'c'],
['1', '2', '3'],
['4', '5', '6']], dtype=object)
'''
然后再用 pd.DataFrame
重新读取这个已经变形好的数据,并指定表头:
pd.DataFrame(arr[1:], columns=arr[0])
'''
a b c
0 1 2 3
1 4 5 6
'''
这样就实现了需求。
(完)
更新时间:2024-08-18 15:38:01 标签:python pandas 数据转换