我试图使用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_table
的aggfunc
参数
数据帧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
所以我想知道:
- 为什么我得到这个警告,它下降相关列?
- 是否有更好的方法来调试它失败的行?(我有一个大的数据框架,现在写我正在寻找相关的行通过切割的工作)
- 我想要的只是重塑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然后计算一些东西,有没有更好的方法?
似乎不需要旋转。这取决于是什么。