🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

3回答

1141閲覧

python pandasの扱い方

NR4200

総合スコア41

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2021/02/22 07:56

前提・実現したいこと

pythonのpandasを使ってExcelファイルから値を取得したいと考えています.

例えば以下のexcelシートがあったとき(A,B,CはExcel にもともとある列の英語表記です)

ABC
111
111
111
111
111
111

Excel にもともとある列の英語表記を指定して値を取得したいと考えています.

そのようなことは可能でしょうか

pandasではなくopenpyxl モジュールなら以下のようなコードで取得できたのですが

python

1from openpyxl import load_workbook 2import numpy as np 3 4path = "C:\Users\N\Desktop"#ファイルの場所 5file_name = "Book1.xlsm"#Excelのファイル名 6point_row = "B" #列の指定 7book = load_workbook('{0}\{1}'.format(path,file_name)) 8active_sheet = book.active 9 10A = [ i.value for i in active_sheet[point_row] if i.value != None]

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

python

1import pandas as pd 2from matplotlib import pyplot as plt 3import numpy as np 4 5path = "C:\Users\N\Desktop"#ファイルの場所 6file_name = "Book1.xlsm"#Excelのファイル名 7df = pd.read_excel('{0}\{1}'.format(path,file_name)) 8 9for col in df.columns: 10 print(df[col].dropna())

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

以下の関数なら、A1:XFD1048576の範囲で動くはずです。

python

1>>> import pandas as pd 2>>> 3>>> XLCTABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 4>>> def xlc(n): 5... if n < 26: 6... return XLCTABLE[n] 7... else: 8... return xlc(n//26-1) + xlc(n%26) 9... 10>>> def read_excel_A1(filename): 11... df = pd.read_excel(filename, header=None) 12... df.index = range(1,df.shape[0]+1) 13... df.columns = [xlc(i) for i in range(df.shape[1])] 14... return df 15... 16>>> df = read_excel_A1('Book1.xlsx') 17>>> print(df) 18 A B C 191 1 11 21 202 2 12 22 213 3 13 23 224 4 14 24 235 5 15 25 246 6 16 26

言うまでもないことですが、df['A'][1]とかdf.loc[1, 'A']のような形でアクセスします。

python

1>>> print(df['B'][3]) 213 3>>> print(df.loc[4, 'C']) 424

これがいやならアクセス用の関数を作ることになりますね。
ということでアクセスメソッドを作ってみました。

python

1>>> import re 2>>> def get_A1(self, A1): 3... m = re.search('([A-Z]+)(\d+)', A1) 4... return self[m.groups()[0]][int(m.groups()[1])] 5... 6>>> pd.DataFrame.get_A1 = get_A1 7>>> df.get_A1('B3') 813 9>>> df.get_A1('C4') 1024

投稿2021/02/22 09:00

編集2021/02/22 09:54
ppaul

総合スコア24670

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

無理じゃないですか?
↓こんな感じの関数を作って対処しましょう。

python

1def column_excel_to_integer(name): 2 return sum(i*26+ord(s)-65 for i, s in enumerate(name)) 3 4column_excel_to_integer('A') # 0 5column_excel_to_integer('Z') # 25 6column_excel_to_integer('AA') # 26 7column_excel_to_integer('AB') # 27

投稿2021/02/22 08:19

kirara0048

総合スコア1399

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ここまでのdfに対して、B列を指定するには

>>> df["B"].to_list() [1, 1, 1, 1, 1, 1]

だけで良いと思います。

希望する
["B", 1, 1, 1, 1, 1, 1] にするには先頭に自分で列名を足せばよいかと思います(意図はあってますか?)

DataFrameの操作はこのへんを参照でしょうか。
https://pandas.pydata.org/docs/getting_started/intro_tutorials/03_subset_data.html

投稿2021/02/22 08:16

tetsunosuke

総合スコア1295

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

NR4200

2021/02/22 08:18

"B"を追加したくないのですが,先頭行に目印?のようなものを入れないと,できないのでしょうか?
tetsunosuke

2021/02/22 08:30

> "B"を追加したくない あ、なるほど。勘違いしました。「ExcelのデータにBがあるわけではない」ということですね。(それが「もともとある」ってことか) df = pd.read_excel(filename, usecols="B") のようにしてBを指定して読み込む、とかなら可能ですがちょっと希望とは異なるかもしれません。 それ以外はAが1で〜という対応関係をどうにかして作るしかない気がします(上のようなことができるということは内部実装でうまいことできてる気もするのですが)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問