我想检查是否发生错误。 我有这两个数据框,来自excel文件:
Log_frame是日志文件的数据帧,报告数据记录和错误:
Time Voltage[V] Freq[Hz] Speed Motor_Stt: ErrNo
0 10:00 220 50 30 1 0
1 10:10 220 50 30 1 0
2 10:20 220 50 0 2 3601
3 10:30 220 47 0 1 1500
4 10:40 250 50 0 1 7707
5 10:50 220 50 0 2 3601
6 11:00 220 50 0 2 3601
7 11:10 220 47 0 1 1500
8 11:20 220 50 30 1 0
9 11:30 220 50 30 1 0
Dev_frame是错误描述的数据帧:
Fehler-Nr. Descr Cause
0 1500 Chk_Voltage Voltage out of range
1 7707 Chk_Freq. Freq. out of range
2 3601 Chk_Motor_Stt Motor_defec
3 7704 switch_trip chk_over_curr
通过Log_frame,我可以通过以下方式检查一天中是否发生了错误以及发生了多少错误:
Err_log = Log_frame['ErrNo']
p = Err_log[Err_log != 0].drop_duplicates('first').reset_index(drop=True)
结果是一个熊猫系列:
<class 'pandas.core.series.Series'>
0 3601
1 1500
2 7707
我可以这样“传递”第一个错误(或第二个以及所有其他错误):
Dev_Err = Dev_frame['Fehler-Nr.']
n = Dev_Err[Dev_Err == p.iloc[0]] #or 1, 2 and so on
我想知道如何循环通过p.iloc [i]。 我应该使用for循环还是可以通过任何熊猫函数完成
编辑:例如如果我在p.iloc []中放入1,我可以得到:
0 1500
如果2:
1 7707
答案 0 :(得分:0)
无需创建循环来检查每个值,可以使用isin
具有的pandas.DataFrame
方法,如下所示:
n = dev_frame[dev_frame['Fehler-Nr.'].isin(p)]['Fehler-Nr.']
这将返回:
0 1500
1 7707
2 3601
Name: Fehler-Nr., dtype: int64
答案 1 :(得分:0)
如果您使用熊猫并进行for循环,则您错了。使用熊猫矢量化操作。这些都是使用(简单示例)完成的
df.apply(some function, axis)
我不是100%确信我理解您要实现的目标,但我相信您只是想合并/合并给定错误的错误数。如果是这样,pandas.join()和pandas.merge()会有所帮助。检查文档。