2

有问题的数据框正在使用 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

我想不出一种不包括过于复杂和低效的方法来做到这一点。

4

2 回答 2

4

我认为您必须屏蔽所有符合条件的行。

在这种情况下,如果['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
于 2019-04-09T16:11:54.273 回答
0

怎么样:df.iloc[2:, 1:] = df.iloc[2:, 1:].shift(2, axis=1)

于 2019-04-09T14:52:40.860 回答