有问题的数据框正在使用Tabula从pdf文件中读取,并在错误的位置获取了一些列。看起来像这样:
Index Name Date Time Exp QT Comm Load Notes
0 VT1 04/16 4:00 Glen 1600 Wheat NaN LTA/Book
1 VT2 04/16 4:00 Cof 16000 Wheat NaN Split/LTA
2 VT3 Glen 35100 Wheat LTA NaN NaN NaN
3 VT4 Glen 18416 Wheat Split/LTA NaN Nan NaN
我不确定为什么会这样,但是问题很明显,在此数据帧的最后几行中,格式不再正确读取,开始忽略空单元格并将数据向左移动。我想做的是移动第2行和第3行,以便它们正确地定向到列。最终结果应该是:
Index Name Date Time Exp QT Comm Load Notes
0 VT1 04/16 4:00 Glen 1600 Wheat NaN LTA/Book
1 VT2 04/16 4:00 Cof 16000 Wheat NaN Split/LTA
2 VT3 NaN NaN Glen 35100 Wheat NaN LTA
3 VT4 NaN NaN Glen 18416 Wheat NaN Split/LTA
我想不出一种不包含过度复杂和低效的方法。
答案 0 :(得分:1)
我认为您必须屏蔽所有符合条件的行。
在这种情况下,如果['Comm', 'Load', 'Notes']
总是NaN
。
mask = df[['Comm', 'Load', 'Notes']].isna().all(axis=1)
然后使用.shift
并将其分配回数据框。
df.loc[mask, 'Date':'Notes'] = df.loc[mask, 'Date':'Notes'].shift(2, axis=1)
df
Index Name Date Time Exp QT Comm Load Notes
0 0 VT1 04/16 4:00 Glen 1600 Wheat NaN LTA/Book
1 1 VT2 04/16 4:00 Cof 16000 Wheat NaN Split/LTA
2 2 VT3 NaN NaN Glen 35100 Wheat NaN LTA
3 3 VT4 NaN NaN Glen 18416 Wheat NaN Split/LTA
答案 1 :(得分:0)
怎么样:df.iloc[2:, 1:] = df.iloc[2:, 1:].shift(2, axis=1)
?