2017-04-05 5 views
0

나는 거기에 테이블이있는 pdf 파일을 가지고 있으며 그 테이블을 Pandas로 가져 오려고합니다. pdf 테이블을 추출하는 것은 옳은 일로 악명 높게 어렵지만, 나는 tabula가 가장 잘 작동한다는 것을 발견했습니다. 그것은 아직 완벽하지는 않지만 제가 본 최고의 멀리 떨어져 있습니다. 나는이 PDF 테이블이 있습니다팬더에서 이름이없는 열의 이름을 바꾸는 방법은 무엇입니까?

Table

참고 테이블의 헤더를, 어떻게 그들은 때때로 다음 행에 실행하고 일반적으로 좋은하지 않습니다. 나는 진짜 문제를 앞두고있다. 내가 볼 수있는 모든 솔루션은 우선 데이터 프레임을 만드는 더 나은 접근법을 요구하기 때문이다. 이 데이터 프레임은 내가 얻을 수있는 최선의 방법이지만, 더 좋은 탭을 얻는 방법을 알고 있다면 알려 주시기 바랍니다.

나는 TABULA-평을 사용하고이 코드를 실행 :

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, Pandas 0.16.2)'FutureWarning : '+'를 사용하여 Indexes와의 통합을 제공합니다. 'union'을 사용했지만 오류가 발생했습니다. 어떤 도움이 필요합니까? – lukehawk

+0

0.19로 업그레이드하거나 모두의 끝에 .values를 넣으십시오. –

+0

Ahhhh yessss. 당나라 - 나는 뒤쳐져 있었다. 감사!!! – lukehawk