- ベストアンサー
PythonでEXCELデータの処理方法
- Pythonを使用して、EXCELデータの処理を簡単に行うことができます。重複の削除や集計、ソートなどの操作が可能です。
- 具体的には、重複データの削除や各地点ごとの種数の計算、緯度の並び替えなどを行うことができます。
- Pythonのソースコードを組むことで、上記のような操作を効率的に行うことができます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
(日本語は母国語ではないので。この文法がおかしかったらすみません…) PythonでCSVファイルのデータをpython listに変換: >>> import csv >>> with open('foo.csv', 'rb') as f: ... r = csv.reader(f) ... l = [row for row in r] ... >>> l [['33.5', 'A', 'suzume', '3'], ['33.5', 'A', 'karasu', '2'], ['33.5', 'A', 'sekirei', '3'], ['33.5', 'A', 'suzume', '1'], ['33.5', 'A', 'kiji', '1'], ['33.5', 'B', 'suzume', '3'], ['33.5', 'B', 'karasu', '2'], ['33.5', 'B', 'hato', '1'], ['33.5', 'B', 'suzume', '1'], ['33.5', 'C', 'hato', '5'], ['40.0', 'A', 'suzume', '2'], ['40.0', 'A', 'karasu', '3'], ['40.0', 'B', 'sekirei', '4']] これで「l」はlistのlistです。 CSVが「,」と違う文字でくぎる場合は (例えば「、」): r = csv.reader(f, delimiter='、') 最後の1,2,3(l[x[3]])がいらないみたいので、それを消えればlistからsetにすると['33.5','A','suzume']を一つになります: >>> l2 = list(set([tuple(z[0:3]) for z in l])) >>> l2 [('33.5', 'A', 'suzume'), ('40.0', 'B', 'sekirei'), ('33.5', 'A', 'sekirei'), ('40.0', 'A', 'suzume'), ('33.5', 'C', 'hato'), ('40.0', 'A', 'karasu'), ('33.5', 'B', 'hato'), ('33.5', 'A', 'kiji'), ('33.5', 'B', 'karasu'), ('33.5', 'B', 'suzume'), ('33.5', 'A', 'karasu')] x[1]、x[2]、(x[1],x[2])等で会計するのではfilterとlamdaが便利です: >>> sum([float(z[0]) for z in filter(lambda x: x[1] == 'A', l2)]) 214.0
その他の回答 (1)
- kmee
- ベストアンサー率55% (1857/3366)
Pythonには「辞書型」という配列のようなものがあります。 通常、配列は ary[index]という形で 配列aryのindex番目のデータを使用します。 ※ Excelで例えるなら、 A[5] は A列の5番目で A5 / R5C1 セル に相当 辞書型では、 dic[key] で、番号の代わりに、key (文字列等が使える) で選択します。 地点と緯度からkeyを作って、 個体数合計[key]=個体数合計[key] + 個体数 のように集計していきます。 元がテキストファイル(CSV等)なら、Pythonで読むのは簡単です。 ですが、Excel形式のファイル(XLS,XLSX)だと、まずは「Excelのデータを読み込む」部分を用意する必要があります。 ExcelVBAでも同様のことができるし、Excelにピボットテーブルで集計することもできます。 数回程度しかしないことなら、ピボットテーブルの使い方を勉強するのがいいと思います。
お礼
ありがとうございます。 参考にさせてもらいます。 Thank you for the answer. I'll try with this reference.