教員名簿がエクセルであったとして、それをデータフレームとして読み込み、役職が教授の行の氏名の列の情報だけを取得する方法。df.loc[行][列]という形で中に条件を埋め込んで書けます。
xls= pd.ExcelFile(file)
df= pd.read_excel(xls)
#教授だけを表示
print (df.loc[(df['役職名(職種名)'] =='教授')]['氏名'])
教員名簿がエクセルであったとして、それをデータフレームとして読み込み、役職が教授の行の氏名の列の情報だけを取得する方法。df.loc[行][列]という形で中に条件を埋め込んで書けます。
xls= pd.ExcelFile(file)
df= pd.read_excel(xls)
#教授だけを表示
print (df.loc[(df['役職名(職種名)'] =='教授')]['氏名'])
Python pandas DataFrameを使っていて、セルを指定する方法がわからずネットで拾ったサンプルコードを使おうとすると、AttributeError: ‘DataFrame’オブジェクトには属性 ‘ix’がありませんというエラーを食らいました。
ixを使ったサンプルコードを頻繁に見かけるのですが、どうやらこれは廃止されたようです。 pandasのバージョンを気にする必要がありそう。ixとかlocとかilocとかで頭が混乱していたのですが、わかりやすい説明がありました。
DataFrameの行・列を指定する方法として、
行ラベル、列ラベルを使った指定方法⇒ loc
行の番号や列の番号を使った指定方法⇒iloc
ラベルや番号を使った指定方法⇒ix
ということだそうです。そして、pandas バージョン0.20.1 では、.ixインデクサが deprecatedになったそう。
データフレームの中から特定の文字を含む行を抽出する
# 特定の名前を探す練習スクリプト
import pandas as pd
df=pd.DataFrame({'名前':['太郎','次郎','三郎'],'研究種目':['若手研究','基盤研究(C)','若手研究']
,'総額':[360,350,480]})
print(df,'\n')
mask = df.applymap(lambda x: '三郎' in str(x))
print (mask)
df1 = df[mask.any(axis=1)]
print('\n', df1)
上のコードを実行した結果は、以下のようになります。
名前 研究種目 総額 0 太郎 若手研究 360 1 次郎 基盤研究(C) 350 2 三郎 若手研究 480 名前 研究種目 総額 0 False False False 1 False False False 2 True False False 名前 研究種目 総額 2 三郎 若手研究 480
pythonのpandasのデータフレームの特定のカラムの中である文字列を含むものだけ取り出したいと思いました。
df_文字列= df[df[‘特定のカラム名’].str.contains(‘文字列’)]
というコードを実行したところ、
ValueError: Cannot mask with non-boolean array containing NA / NaN values
というエラーになりました。このエラーの原因は何かというと、カラムの中に「空欄」が存在していたからなんですね。
以下のようにNAを無視するように na=Falseを付け加えたら、
df_文字列 = df[df[‘特定のカラム名’].str.contains(‘文字列’, na=False)]
エラーを回避できました。
この手のエラーは、空欄を含むスプレッドシートをデータフレームとして読み込んで何か処理をしようとするときには必ず遭遇してしまうと思います。空欄に関しては、何らかの例外処理が必要ということですね。