我有一个非常大的csv文件,记录超过100k.
在其中,每个记录是一个具有id和大约20~30个属性的对象.
我需要操作它,因此每条记录都是id的三元组,没有空属性和值.
我创建了一个简单数据框的示例来举例.
给出以下数据框:
data = [{'id': 1, 'shape': 'circle', 'size': 10, 'color':'green'},
{'id': 2, 'shape': 'square', 'color':'pink'},
{'id': 3, 'shape': 'triangle', 'size': 5, 'color': 'black'},
{'id': 4, 'shape': 'pentagon', 'size': 25}]
df = pd.DataFrame(data)
df
Out[10]:
color id shape size
0 green 1 circle 10.0
1 pink 2 square NaN
2 black 3 triangle 5.0
3 NaN 4 pentagon 25.0
有没有一种有效的方法来获得结果?它应该如下所示:
Out[17]:
id property value
0 1 shape circle
1 1 size 10
2 1 color green
3 2 shape square
4 2 color pink
5 3 shape triangle
6 3 size 5
7 3 color black
8 4 shape pentagon
9 4 size 25
当然,应该跳过NaN细胞.
解决方法:
pd.melt(df,id_vars='id',var_name='Property').dropna().sort_values('id')
id Property value
0 1 color green
4 1 shape circle
8 1 size 10
1 2 color pink
5 2 shape square
2 3 color black
6 3 shape triangle
10 3 size 5
7 4 shape pentagon
11 4 size 25
如果索引顺序很重要:
>>pd.melt(df,id_vars='id',var_name='Property').dropna().sort_values('id').reset_index(drop=True)
id Property value
0 1 color green
1 1 shape circle
2 1 size 10
3 2 color pink
4 2 shape square
5 3 color black
6 3 shape triangle
7 3 size 5
8 4 shape pentagon
9 4 size 25
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。