微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 数据帧结构操作

我有一个非常大的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()

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] 举报,一经查实,本站将立刻删除。

相关推荐