未分類」カテゴリーアーカイブ

リスト内包表記で複数の条件を用いるときの書式

リスト内包表記は非常に便利で、様々な条件に適合する要素だけをリストから抽出することができます。一つの条件だけでなく、複合条件を適用することもできるようです。

所属リスト = [‘東京大学医学部’, ‘京都大学医学部’, ‘東京大学理学部’, ‘東京大学’, ‘東京大学病院’]
東大医 = [s for s in 所属リスト if (‘東京大学’ in s) and ((‘医学部’ in s) or (‘病院’ in s)) ]
print(東大医)

 

出力結果は、

 

[‘東京大学医学部’, ‘東京大学病院’]

 

となりました。

 

参考

  1. Pythonで文字列のリスト(配列)の条件を満たす要素を抽出、置換(nkmk)

python pandas データフレームをゼロから作る方法 初期値として全てに0をセット

データフレームの作り方はいろいろあります。既存のエクセルファイルを読み込んだり、リストの形になっているデータを読み込んだり。しかし、データがあとから生成される場合に、最初に「空」のデータフレームを作っておきたい場合もあります。行名、列名は指定して、値は全て0を初期値とするデータフレームの作り方。

 

import pandas as pd

 

行名 = [2016,2017,2018,2019,2020]
列名 = [‘Medicine’,’Science’]
df = pd.DataFrame(index=行名, columns=列名)

for col in df.columns:

df[col].values[:] = 0

python3では日本語も変数名として使えるので、上のコードではそうしてみました。

 

dfの出力結果は、

Medicine Science
2016 0 0
2017 0 0
2018 0 0
2019 0 0
2020 0 0

となります。

【対処法・解決】エラーメッセージ UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0x8c in position 62517: invalid start byte

タブ区切りのCSVファイルをpandasのread_table()メソッドを用いてデータフレームとして読み込もうとしたときに、

df = pd.read_table(file)

UnicodeDecodeError: ‘utf-8′ codec can’t decode byte 0x8c in position 62517: invalid start byte というエラーが出てしまい、にっちもさっちもいかなくなって困りました。ネットで見かけた解決策をあれこれ試しても全然効果なし。ところが、encoding=’unicode_escape’を付けてみたら、

 

df = pd.read_table(file, encoding=’unicode_escape’)

 

無事読み込めました。

pythonの辞書(dictionary)の配列を作成する方法

pythonのモジュールpandasの中にあるDataFrameはエクセルなどの表の処理に便利ですが、各々のカラムの長さ(要素の数)が同じでないといけないという制約があるようです。そのため、要素の数などに制限がないようにと、辞書(dictionary)の配列を作ることを考えましたが、やり方がわからずネットで検索した結果、やり方が紹介されているのを見つけました。

  1. How can I create an array/list of dictionaries in python? (stackoverflow)
dictlist = [dict() for x in range(10)]

と簡単に10個の辞書からなる配列が作れました。