2017-04-05 82 views
0

我有一張帶有表格的pdf,並試圖將該表格放入Pandas中。提取pdf表格非常困難,但我發現tabula的效果最好。這是我見過的最好的,但仍然不完美。我有這樣的PDF表:如何重命名熊貓中的未命名列?

Table

注意的表頭,以及他們如何有時運行到下一行,一般都不會好看。我面臨着真正的問題,因爲我看到的所有解決方案都要求首先創建一個更好的方法來創建數據框。這個數據框是我能得到的最好的數據,但是如果你知道如何從tabula中獲得更好的數據,請告訴我。

我用塔布拉-PY,並運行此代碼:

holdingsDF = tbla.read_pdf(fileName, nospreadsheet=True) 

有很多選擇,我不知道所有的人,但是這似乎是我能做到的最好,擺弄後與選項。由此產生的DF是這樣的:

  Unnamed: 0     Unnamed: 1  Unnamed: 2 Identifier Unnamed: 4 Curren Unnamed: 6 TAG0 Strategy 
0  Asset Type      Name  Identifier  NaN Quantity NaN  Price   NaN 
1    NaN       NaN    NaN  Type  NaN  cy  NaN   Name 
2   Equity  Akamai Technologies Inc AKAM US Equity  TICKER (5,830) USD  65.000   AKAM 
3 Convertible Bond    AKAM 0 02/15/19 US00971TAG67  ISIN 1,595,000 USD 100.875   AKAM 
4   Equity Advanced Micro Devices Inc AMD US Equity  TICKER (181,500) USD  13.490   AMD 
5 Convertible Bond   AMD 2 1/8 09/01/26 US007903BD80  ISIN 1,650,000 USD 185.500   AMD 

如果你看,你可以看到頭是前三行中的分類。我該如何解決?有沒有什麼聰明,優雅的解決方案可以爲每一列選擇三個名稱中的「最好」,並將列名稱?

謝謝!

+0

只需鍵入所有列名稱,它可能比創建程序化解決方案還要快。 – Psidom

回答

1

這是一個純粹的熊貓解決方案 - 假設數據框完全按照下面的方式讀取。

df.columns = df.columns.str.replace('Unnamed.*', '') + \ 
      df.iloc[0].fillna('') + \ 
      df.iloc[1].fillna('') 

df.drop([0,1], inplace=True) 


1  Asset Type      Name  Identifier \ 
2   Equity  Akamai Technologies Inc AKAM US Equity 
3 Convertible Bond    AKAM 0 02/15/19 US00971TAG67 
4   Equity Advanced Micro Devices Inc AMD US Equity 
5 Convertible Bond   AMD 2 1/8 09/01/26 US007903BD80 

1 IdentifierType Quantity Currency Price TAG0 StrategyName 
2   TICKER (5,830)  USD 65.000    AKAM 
3   ISIN 1,595,000  USD 100.875    AKAM 
4   TICKER (181,500)  USD 13.490    AMD 
5   ISIN 1,650,000  USD 185.500    None 
+0

我得到這個警告(Python 3.4,熊貓0.16.2)'FutureWarning:使用'+'提供設置聯合索引已棄用'我嘗試使用'聯合',但我得到一個錯誤。任何幫助? – lukehawk

+0

升級到0.19或者嘗試在所有人的末尾加上.values –

+0

Ahhhh yessss。當 - 我當時落後了。謝謝!!! – lukehawk