[]替换数据框中的值是什么意思?

问题描述 投票:1回答:1

创建数据透视表后,我出现了许多[]值。我不确定为什么会这样,但是我想弄清楚为什么/是否可以安全删除?

数据框列的类型为:

zone                    float64
logtime_round    datetime64[ns]
varname                  object
value                   float64
index1                    int64

我正在使用以下代码创建数据透视表:

pivot = df.pivot_table(index='logtime_round', columns=['varname','zone'], values='value', aggfunc=lambda x: x)

这是我的数据透视表的一个凌乱的例子,出现了[[]]。

arname  HeatingSetpoint     SetpointMode
zone    0.0     1.0     2.0     3.0     4.0     5.0     6.0     0.0     1.0     2.0     3.0     4.0     5.0     6.0
logtime_round                                                       
2017-05-01 06:00:00     17  14.5    14.5    14.5    14.5    15  NaN     100     100     100     100     100     100     NaN
2017-05-01 06:05:00     17  17  14.5    17  17  15  NaN     100     100     100     100     100     100     NaN
2017-05-01 06:20:00     []  []  []  []  []  []  NaN     []  []  []  []  []  []  NaN
2017-05-01 06:30:00     14.5    14.5    14.5    14.5    14.5    15  NaN     100     100     100     100     100     100     NaN
2017-05-01 08:05:00     []  []  []  []  []  []  NaN     []  []  []  []  []  []  NaN

[当我尝试删除时,基于该值删除行,所有行均被删除(dfremove.drop(df[df.HeatingSetpoint == '[]'].index, inplace=True))。感谢您的帮助!

编辑:有效的示例(对不起空格!)

      df_dict = {'zone': {125: 5.0,
      126: 5.0,
      127: 4.0,
      128: 4.0,
      129: 3.0,
      130: 2.0,
      131: 2.0,
      132: 1.0,
      133: 1.0,
      134: 0.0,
      135: 0.0,
      136: 3.0,
      143: 5.0,
      144: 5.0,
      145: 1.0,
      146: 0.0,
      147: 0.0,
      148: 1.0,
      149: 2.0,
      150: 4.0,
      151: 4.0,
      152: 3.0,
      153: 2.0,
      154: 3.0,
      156: 0.0,
      157: 1.0,
      158: 1.0,
      159: 2.0,
      160: 3.0,
      161: 0.0,
      162: 4.0,
      163: 5.0,
      164: 5.0,
      165: 3.0,
      166: 5.0,
      167: 4.0,
      168: 4.0,
      172: 5.0,
      175: 0.0,
      176: 2.0,
      177: 1.0,
      178: 1.0,
      179: 2.0,
      180: 4.0,
      181: 3.0,
      182: 3.0,
      183: 2.0,
      184: 0.0,
      186: 5.0,
      187: 4.0},
     'logtime_round': {125: Timestamp('2017-05-01 06:00:00'),
      126: Timestamp('2017-05-01 06:00:00'),
      127: Timestamp('2017-05-01 06:00:00'),
      128: Timestamp('2017-05-01 06:00:00'),
      129: Timestamp('2017-05-01 06:00:00'),
      130: Timestamp('2017-05-01 06:00:00'),
      131: Timestamp('2017-05-01 06:00:00'),
      132: Timestamp('2017-05-01 06:00:00'),
      133: Timestamp('2017-05-01 06:00:00'),
      134: Timestamp('2017-05-01 06:00:00'),
      135: Timestamp('2017-05-01 06:00:00'),
      136: Timestamp('2017-05-01 06:00:00'),
      143: Timestamp('2017-05-01 06:05:00'),
      144: Timestamp('2017-05-01 06:05:00'),
      145: Timestamp('2017-05-01 06:05:00'),
      146: Timestamp('2017-05-01 06:05:00'),
      147: Timestamp('2017-05-01 06:05:00'),
      148: Timestamp('2017-05-01 06:05:00'),
      149: Timestamp('2017-05-01 06:05:00'),
      150: Timestamp('2017-05-01 06:05:00'),
      151: Timestamp('2017-05-01 06:05:00'),
      152: Timestamp('2017-05-01 06:05:00'),
      153: Timestamp('2017-05-01 06:05:00'),
      154: Timestamp('2017-05-01 06:05:00'),
      156: Timestamp('2017-05-01 06:20:00'),
      157: Timestamp('2017-05-01 06:20:00'),
      158: Timestamp('2017-05-01 06:20:00'),
      159: Timestamp('2017-05-01 06:20:00'),
      160: Timestamp('2017-05-01 06:20:00'),
      161: Timestamp('2017-05-01 06:20:00'),
      162: Timestamp('2017-05-01 06:20:00'),
      163: Timestamp('2017-05-01 06:20:00'),
      164: Timestamp('2017-05-01 06:20:00'),
      165: Timestamp('2017-05-01 06:20:00'),
      166: Timestamp('2017-05-01 06:20:00'),
      167: Timestamp('2017-05-01 06:20:00'),
      168: Timestamp('2017-05-01 06:20:00'),
      172: Timestamp('2017-05-01 06:20:00'),
      175: Timestamp('2017-05-01 06:20:00'),
      176: Timestamp('2017-05-01 06:20:00'),
      177: Timestamp('2017-05-01 06:20:00'),
      178: Timestamp('2017-05-01 06:20:00'),
      179: Timestamp('2017-05-01 06:20:00'),
      180: Timestamp('2017-05-01 06:20:00'),
      181: Timestamp('2017-05-01 06:20:00'),
      182: Timestamp('2017-05-01 06:20:00'),
      183: Timestamp('2017-05-01 06:20:00'),
      184: Timestamp('2017-05-01 06:20:00'),
      186: Timestamp('2017-05-01 06:30:00'),
      187: Timestamp('2017-05-01 06:30:00')},
     'varname': {125: 'SetpointMode',
      126: 'HeatingSetpoint',
      127: 'SetpointMode',
      128: 'HeatingSetpoint',
      129: 'HeatingSetpoint',
      130: 'SetpointMode',
      131: 'HeatingSetpoint',
      132: 'SetpointMode',
      133: 'HeatingSetpoint',
      134: 'SetpointMode',
      135: 'HeatingSetpoint',
      136: 'SetpointMode',
      143: 'SetpointMode',
      144: 'HeatingSetpoint',
      145: 'HeatingSetpoint',
      146: 'SetpointMode',
      147: 'HeatingSetpoint',
      148: 'SetpointMode',
      149: 'HeatingSetpoint',
      150: 'SetpointMode',
      151: 'HeatingSetpoint',
      152: 'SetpointMode',
      153: 'SetpointMode',
      154: 'HeatingSetpoint',
      156: 'SetpointMode',
      157: 'HeatingSetpoint',
      158: 'SetpointMode',
      159: 'HeatingSetpoint',
      160: 'SetpointMode',
      161: 'HeatingSetpoint',
      162: 'SetpointMode',
      163: 'HeatingSetpoint',
      164: 'SetpointMode',
      165: 'HeatingSetpoint',
      166: 'SetpointMode',
      167: 'HeatingSetpoint',
      168: 'SetpointMode',
      172: 'HeatingSetpoint',
      175: 'HeatingSetpoint',
      176: 'SetpointMode',
      177: 'HeatingSetpoint',
      178: 'SetpointMode',
      179: 'HeatingSetpoint',
      180: 'HeatingSetpoint',
      181: 'SetpointMode',
      182: 'HeatingSetpoint',
      183: 'SetpointMode',
      184: 'SetpointMode',
      186: 'SetpointMode',
      187: 'SetpointMode'},
     'value': {125: 100.0,
      126: 15.0,
      127: 100.0,
      128: 14.5,
      129: 14.5,
      130: 100.0,
      131: 14.5,
      132: 100.0,
      133: 14.5,
      134: 100.0,
      135: 17.0,
      136: 100.0,
      143: 100.0,
      144: 15.0,
      145: 17.0,
      146: 100.0,
      147: 17.0,
      148: 100.0,
      149: 14.5,
      150: 100.0,
      151: 17.0,
      152: 100.0,
      153: 100.0,
      154: 17.0,
      156: 100.0,
      157: 17.0,
      158: 100.0,
      159: 14.5,
      160: 100.0,
      161: 17.0,
      162: 100.0,
      163: 15.0,
      164: 100.0,
      165: 17.0,
      166: 100.0,
      167: 17.0,
      168: 100.0,
      172: 15.0,
      175: 14.5,
      176: 100.0,
      177: 17.0,
      178: 100.0,
      179: 14.5,
      180: 17.0,
      181: 100.0,
      182: 17.0,
      183: 100.0,
      184: 100.0,
      186: 100.0,
      187: 100.0},
     'index1': {125: 125,
      126: 126,
      127: 127,
      128: 128,
      129: 129,
      130: 130,
      131: 131,
      132: 132,
      133: 133,
      134: 134,
      135: 135,
      136: 136,
      143: 143,
      144: 144,
      145: 145,
      146: 146,
      147: 147,
      148: 148,
      149: 149,
      150: 150,
      151: 151,
      152: 152,
      153: 153,
      154: 154,
      156: 156,
      157: 157,
      158: 158,
      159: 159,
      160: 160,
      161: 161,
      162: 162,
      163: 163,
      164: 164,
      165: 165,
      166: 166,
      167: 167,
      168: 168,
      172: 172,
      175: 175,
      176: 176,
      177: 177,
      178: 178,
      179: 179,
      180: 180,
      181: 181,
      182: 182,
      183: 183,
      184: 184,
      186: 186,
      187: 187}}
df = pd.DataFrame(df_dict)
testpivot = df.pivot_table(index='logtime_round', columns=['varname', 'zone'], values='value', aggfunc=lambda x: x)
python pandas pivot-table
1个回答
1
投票

您为导致列表结果的每个区域和变量名重复了2017-05-01 06:20:00的值。

要获得清晰的视野,请尝试

df.pivot_table(index='logtime_round', columns=['varname', 'zone'], values='value', aggfunc=lambda x: x.to_list())

结果:

    varname             HeatingSetpoint                                                                          SetpointMode                                                                                
zone                            0.0           1.0           2.0           3.0           4.0           5.0             0.0             1.0             2.0             3.0             4.0             5.0
logtime_round                                                                                                                                                                                            
2017-05-01 06:00:00          [17.0]        [14.5]        [14.5]        [14.5]        [14.5]        [15.0]         [100.0]         [100.0]         [100.0]         [100.0]         [100.0]         [100.0]
2017-05-01 06:05:00          [17.0]        [17.0]        [14.5]        [17.0]        [17.0]        [15.0]         [100.0]         [100.0]         [100.0]         [100.0]         [100.0]         [100.0]
2017-05-01 06:20:00    [17.0, 14.5]  [17.0, 17.0]  [14.5, 14.5]  [17.0, 17.0]  [17.0, 17.0]  [15.0, 15.0]  [100.0, 100.0]  [100.0, 100.0]  [100.0, 100.0]  [100.0, 100.0]  [100.0, 100.0]  [100.0, 100.0]
2017-05-01 06:30:00             NaN           NaN           NaN           NaN           NaN           NaN             NaN             NaN             NaN             NaN         [100.0]         [100.0]

现在要解决此问题,您需要决定对重复项要做什么。一种解决方案是只重复获取第一个值。

df.pivot_table(index='logtime_round', columns=['varname', 'zone'], values='value', aggfunc=lambda x: x.iloc[0])

结果:

    varname             HeatingSetpoint                               SetpointMode                                   
zone                            0.0   1.0   2.0   3.0   4.0   5.0          0.0    1.0    2.0    3.0    4.0    5.0
logtime_round                                                                                                    
2017-05-01 06:00:00            17.0  14.5  14.5  14.5  14.5  15.0        100.0  100.0  100.0  100.0  100.0  100.0
2017-05-01 06:05:00            17.0  17.0  14.5  17.0  17.0  15.0        100.0  100.0  100.0  100.0  100.0  100.0
2017-05-01 06:20:00            17.0  17.0  14.5  17.0  17.0  15.0        100.0  100.0  100.0  100.0  100.0  100.0
2017-05-01 06:30:00             NaN   NaN   NaN   NaN   NaN   NaN          NaN    NaN    NaN    NaN  100.0  100.0
© www.soinside.com 2019 - 2024. All rights reserved.