2017-01-12 4 views
4

私はpandas(python)を使用して多くのExcelファイルを読みたいと思います。データをインポートする際には、すべての列を文字列として保存する必要があります。Python - Pandas - ENTIREを抽出すると、ファイルが文字列として出力されます。

問題は、列の数や名前(毎回変わる)がわからないことです。この問題の簡単な解決策はありますか?

私は何をしようとした:

converters = { i : str for i in range(0,99)} 
df = pd.read_excel('example.xlsx', converters = converters) 

しかし、Excelファイルが異なっているため、インデックスは時々範囲から外れます。

理想的には私がやりたい:

df = pd.read_excel('example.xlsx', converters = ALL) 

それでも、私は私がこれまでに同様の何かをすることに役立つだろう何かを発見していない...

はあなたの助けをいただき、ありがとうございます。その後、私たちは(パンダ用)標準を使用することができると思いxlrdモジュールと

xl = pd.ExcelFile(fn) 
ncols = xl.book.sheet_by_index(0).ncols 
df = xl.parse(0, converters={i : str for i in range(ncols)}) 

OLD答えExcelファイルからデータを読み取るための再利用:

+1

df = pd.read_excel( 'example.xlsx')。asytpe (str) '? – MaxU

+0

MaxU、私はDataFrameオブジェクトがasytpe属性を持っているとは思わない。 – Jeremie

+0

'コンバータ= {i:str for i in range(0,99)}' – piRSquared

答えて

4

UPDATE

を私はあなたを考えます最初に列数を取得する必要があります。

from openpyxl import load_workbook 

workbook = load_workbook(filename, use_iterators=True) 
col_num = workbook.worksheets[0].max_column 

converters = { i : str for i in range(col_num)} 
... 
+1

私は再びupvoteしようとすると...それはちょうど方法をとります。それは私が望むものではありません。どのように2回upvoteするのですか?これは私の次のメタ問題です。 – piRSquared

+1

ありがとうMaxU:ほとんどの場合に機能しますが、ファイルの最後に抽出するテーブルの一部ではない余分な列があることがあります(私はそれらを避けるためにskiprowを使いました)。したがって、あなたのコードでは、 'col_num'が高すぎてインデックスが範囲外になります。 私が見つけた解決策は 'read_excel'を2回使用することでした:' df.columns.max'を初めて取得する(必要のない行をスキップした後)、次に 'converters = {i:範囲内の私のためのstr(df.columns.max)} '。 しかし、私は2回エクセルファイルを読むことを避けたいと思っています.... – Jeremie

+0

@ user7410504あなたがそれを何度も読まないようにしたいのであれば、それはもっと良いフォーマットにすべきです。これがフォーマットを使用する理由で、非効率な作業を避けることができます。 – piRSquared

関連する問題