数据框结构操作

2024-05-20 01:32:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个非常大的csv文件,有超过10万条记录。
其中,每条记录都是一个具有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单元格。你知道吗


Tags: 数据idsize属性记录greennancolor
2条回答

您只需像@Jon提到的那样df.melt()调用dataframe上的melt(),并使用id_vars参数集对值进行排序。你知道吗

>>> df.melt(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

阅读article有趣的是它说。。你知道吗

  • 性能比原来的melt快约30-40%,比lreshape稍慢,比wide_to_long快得多。你知道吗

使用^{}

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

相关问题 更多 >