Pandas pivot_table删除了一个列,尽管没有进行聚合,只是进行了重塑



我试图使用Pandas的pivot_table函数来重塑我的数据框架。但是它在特定的行上失败了,我得到消息:

FutureWarning: pivot_table dropped a column because it failed to aggregate. This behavior is deprecated and will raise in a future version of pandas. Select only the columns that can be aggregated.
pivoted = df_first_1000.pivot_table(index=['time', 'motor'], columns='key', values='value')

我有一个数据框架,列:['time', 'motor','key','value']我想重塑它,'key'列中的变量将是列,'value'列下的值将是协调的。

像这样的,原点df:

的例子
time    motor               key      value
1125 2023-01-02 11:41:10.229  MOTOR_5             state          1
1126 2023-01-02 11:41:10.313  MOTOR_5             right  -8.832798
1127 2023-01-02 11:41:10.313  MOTOR_5              left  -9.093866
1128 2023-01-02 11:41:10.313  MOTOR_5               pos   0.213856
1129 2023-01-02 11:41:10.313  MOTOR_5               vel   0.024477
1130 2023-01-02 11:41:10.314  MOTOR_5              temp  27.969526
1131 2023-01-02 11:41:10.314  MOTOR_5          measured   0.000000

后面的命令:

pivoted = df.pivot_table(index=['time', 'motor'], columns='key', values='value')
pivoted.reset_index(inplace=True)
pivoted.columns.name = None

我:

time    motor     state      measured     pos            left     right       temp       vel
0 2023-01-02 11:41:10.229  MOTOR_5       1.0           NaN       NaN          NaN       NaN        NaN       NaN
1 2023-01-02 11:41:10.313  MOTOR_5       NaN           NaN  0.213856      -9.093866    -8.832798   NaN     0.024477
2 2023-01-02 11:41:10.314  MOTOR_5       NaN           0.0       NaN          NaN       NaN       27.969526  NaN

我在循环中执行相同的命令来处理类似的数据帧,如原点,但它失败了,我不明白为什么。我甚至没有使用pivot_tableaggfunc参数

数据帧id的行不工作的例子:

time    motor               key      value
1129 2023-01-02 11:41:10.832  MOTOR_6             state          1
1130 2023-01-02 11:41:10.849  MOTOR_6               vol  32.202164
1131 2023-01-02 11:41:10.849  MOTOR_6               vol   32.20553

我:

FutureWarning: pivot_table dropped a column because it failed to aggregate. This behavior is deprecated and will raise in a future version of pandas. Select only the columns that can be aggregated.
pivoted = df_first_1000.pivot_table(index=['time', 'motor'], columns='key', values='value')
time    motor
0 2023-01-02 11:41:10.832  MOTOR_6
1 2023-01-02 11:41:10.849  MOTOR_6

所以我想知道:

  1. 为什么我得到这个警告,它下降相关列?
  2. 是否有更好的方法来调试它失败的行?(我有一个大的数据框架,现在写我正在寻找相关的行通过切割的工作)
  3. 我想要的只是重塑df,然后计算一些东西,有更好的方法吗?

为什么我得到这个警告,它下降相关列?

因为pivot_table默认聚合mean,所以如果列value不是数字,它会引发警告。

解决方案应该是:

df.pivot(index=['time', 'motor'], columns='key', values='value')
df['value'] = pd.to_numeric(df['value'], errors='coerce')
df.pivot_table(index=['time', 'motor'], columns='key', values='value')

是否有更好的方法来调试它失败的行?(我有一个大的数据框架,现在写我正在寻找相关的行通过切割raw工作)

你可以测试哪些值不是数值:

df[pd.to_numeric(df['value'], errors='coerce').isna() & df['value'].notna()]

我只想重塑df然后计算一些东西,有没有更好的方法?

似乎不需要旋转。这取决于是什么

最新更新