投稿者「scientist」のアーカイブ

リストの要素の文字列が特定の文字で始まるときにその特定の文字を除去する方法

pythonで語句のリストがあったとき、特定の文字で始まる語句に関してその特定の文字を除去したいことがありあす。例えば、一部の語句はTheで始まるpythonのリスト [‘The pen’,’desk’, ‘The ink’]の場合に、どうやってこの中のTheを除去すればよいでしょうか。

以下のコードで実現できました。

# リストの要素の文字列がTheで始まる場合はそれを除去する

list = ['The pen','desk', 'The ink']
new_list = []

for element in list:
if element.startswith('The '):
sub0,sub1 = i.split('The ',1)
new_list = new_list+[sub1]
else:
new_list = new_list+[i]

print(list)
print(new_list)
動作の説明ですが、新しいリストを準備しておきます。

new_list = []

forループでリスト内の要素を一つずつチェック。’The ‘で始まる場合とそうでない場合で処理を分けます。’The ‘で始まる文字列に関しては、’The ‘の前後に分割。前は何もないのでカラの文字列になります(sub0)。後ろが自分が欲しい文字列(sub1)。sub1はストリングのデータタイプはストリングなので[]でリストにしてから、+という演算子でリスト同士を合わせます。上のコードを実行した結果は、

['The pen', 'desk', 'The ink']
['ink', 'The ink', 'ink']

で、うまく期待した動作をしてくれました。

註:このブログの記事内では、インデントがなくなってしまっています。forループの中身にはインデントが必要。さらにその中のif文およびelse文の中身もインデントが必要です。

TypeError: read_excel() got an unexpected keyword argument ‘encoding’ というエラーが出るようになってしまった

以前は動いていたコードなのに、今回実行したらなぜか

TypeError: read_excel() got an unexpected keyword argument ‘encoding’

というエラーが出てしまいます。pandasのバージョンがいつのまにかアップグレードされていて、使えなくなったということなのでしょうか。ネットを調べたら、やはり、以前のバージョンではOKだったみたいです。

I know that Providing encoding as a keyword argument is unnecessary and only “worked” before so what is the alternative of encoding in pandas 1.2.3 that i can use. https://stackoverflow.com/questions/69015459/read-excel-not-accepting-encoding-on-pandas-1-2-3

とりあえず、その部分を削除したら問題なく動作しました。

 

【解決】ValueError: Max value is 14 pythonでエクセルを開こうとして出たエラー

pythonのpandasの機能をつかって、

pd.ExcelFile

というコマンドでエクセルを開こうとしてしたらValueError: Max value is 14 というエラーが、ある時期から出るようになって困ってしまいました。

解決:ネットを見ていたら、余計なフォーマットを除去したらいいみたいだったので、

I had to remove all formatting in a sheet I was working with. 

https://stackoverflow.com/questions/50236928/openpyxl-valueerror-max-value-is-14-when-using-load-workbook

問題のエクセルファイルを一度CSV形式で保存して、再び開き、エクセル形式で保存しなおしました。すると ValueError: Max value is 14 が出なくなりました。エラーを引き起こしていた余計なものがなんだったのかはわかりませんが、問題が解決したのでこれ以上気にしないことにします。

データフレーム 特定の列が特定の値の行を取得する方法

教員名簿がエクセルであったとして、それをデータフレームとして読み込み、役職が教授の行の氏名の列の情報だけを取得する方法。df.loc[行][列]という形で中に条件を埋め込んで書けます。

xls= pd.ExcelFile(file)
df= pd.read_excel(xls)

#教授だけを表示
print (df.loc[(df['役職名(職種名)'] =='教授')]['氏名'])

 

pd.ExcelFile(file)でエラー ValueError: Max value is 14

pandasのエクセルを読み込むコマンド

pd.ExcelFile(file)

を使って、PDFの表をエクセルに保存したものを読みこもうとしたら、

ValueError: Max value is 14

というエラーになってしまいました。エラーコードを自分が見ても全く理解できないので、あれこれ試行錯誤したのですが、結果的に、エクセルのファイルの中身をコピーアンドペーストで一度、シンプルエディタ(ウインドウズの「メモ帳」)に張り付けて、そこからコピーアンドペースとで新規作成したエクセルファイルに張り付けました。それを保存して、読み込ませたら読めました。おそらく文字に何か、眼に見えないフォーマットがへばりついていたのではないかと想像します。解決方法としては邪道ですが、作業を先に進めることができるのでよしとします。

APIの使い方

APIの使い方ウェブチュートリアル

Python & APIs: A Winning Combo for Reading Public Data by Pedro Pregueiro Feb 22,  2021 Pedro PregueiroさんのAPI解説ウェブ記事。題名に惹かれて中身を読んだら、期待に違わずわかりやすい説明だった。APIが完全に初めてな人向けに非常にスローペースでわかりやすい解説。しかし、最後は面白みのある使用例を示している(新型コロナウイルスの感染状況の分析)。世の中には物事をかみ砕いて説明するのが上手い人がいるもんだと感心。

エラーの解決方法 TypeError: only size-1 arrays can be converted to Python scalars

ガンマ関数を使おうとして遭遇したエラー。どうしたらいいのでしょうか、コレ。

import numpy as np
from math import gamma
x=np.arange(1,10,1)
gamma(x)#TypeError: only size-1 arrays can be converted to Python scalars

どうやらmathの関数gamma()は配列を受け付けてくれないみたいです。

from scipy.special import gamma
import numpy as np
x = np.arange(1,10,1)
gamma(x)

だとエラーが出ずに結果が出ました。

関数を呼び出す行で TypeError: ‘str’ object is not callable のエラーが発生【解決】

さっきまで動いていたのに、ちょっと変えたらTypeError: ‘str’ object is not callable が出て困ってしまいました。ググったら、変数名がぶつかっているとかいろいろ。自分が心当たりがあったのは、

a = -1

a = 関数の戻り値

と、コードをテストする都合上、使い分けていたことです。片方をコメントアウトしても、だめだったのかも。jupyter notebook かanaconda3か、前のを覚えているため、コードを書き直したとしてもエラーが取れないというのを見かけて、自分もノートを閉じてanaconda3も一度終了してから、起動しなおしてみました。そうするとあっさり解決。エラーが出なくなりました。

 

何が理由かはっきりわかりませんが(自分の場合、関数名と変数名がだぶっていたというわけではないので)。

anaconda3 (python3)へのplotlyのインストール

Pythonデータビジュアライゼーション入門 コードと連動してわかる可視化手法 という本を読んでいたら、サンプルコードを動かすのにいくつかのモジュールが必要でした。pythonモジュールのインストールは通常、Anacondaの画面からやっています。しかしplotlyをインストールしようとしたらエラーが出て、なぜかうまくいきませんでした。

 

そこで、方針を変えることにしました。

 

ANACOND NAVIGATORのパネルの左側のメニューでEnvironmentsを選び、base(root)の三角印をクリックするとプルダウンメニューが現れるのでその中からOpen with Pythonを選びます。すると、ターミナルウインドウが現れて、pythonのコマンドが使えます。そこで、

pip install plotly

と入力してエンターキーをヒット。しばらく待ったら、無事インストールできました。foliumも同様に、

pip install folium

としてやると、サクッとインストールに成功しました。なぜanacondaの環境でやろうとしてできなかったことが、コマンドウインドウからやるとできたのかは謎です。