すごくたくさん使うのに、全然覚えられないから改めて。
汎用性高めで書きたい。かなりよく使うので、コピペできるようにしました。
一応現場で使うときのことを考えてあるし、実際に失敗したことのフィードバックもしている書き方なので、学生さんとか、ご参考にどうぞ。
python (version:3.9)
CSVのREAD
import pandas as pd
f_path = ''
f_name = 'input'
f_path = './' + f_path + f_name + '.csv'
df = pd.read_csv(f_path ,
encoding='shift-jis' ,# たまにutf-8
sep=',' ,
index_col=0
)
上記のポイントは下記の4点。
- 名前は変数に入れておく
- encodingは基本的にshift-jis
- 区切り文字は明確に指定しておくこと
- indexも明確に明示しておくといいと思う
1に関して、ファイル名とか何かの特性の名前は何かと後々使うというか、その都度変わるというか、最初から変数に入れておくとハードコーディングになりにくい。(dfから読んだりするときもコピペしやすいしね。)
2に関して、どうせあれでしょ?最初と最後は天下のエクセル様で開くんでしょ?なのでshift-jisがめちゃくちゃ使われる。ただ注意なのがutf-8でreadするときもまあまあ多いのが現実。はあ。
3に関しては、実際の失敗がもとになっている。テキトーにreadしたらdataframeがぐちゃぐちゃで、なんてこったと慌てふためいて、だいぶ時間が蒸発したあとに「_(アンダーバー)」で区切り文字が判断されていたことがあった。pandasさんは良かれと思って自動的に変えてくれたんだね。はあ。
4はお好みかもしれないけど、明示しとくといいと思う。列数が一つ減るのが嫌ならNoneにすればいい話。
ようするに入力データは都度変わるし、(私は)ミスをめちゃくちゃするので、起きないようにあらかじめ明示しようということだ!
※csvにて、dataframeを転値する場合
最適解がまだ定かではないんだけど、はまりポイントをご紹介。
ケースとしては入力の段階でデータが転値されちゃってるケース。「.T」で転置するわけなんだけど、readするときに警告がうざい。型があっていませんよということなんだけど列数が多ければ多いほど、うざい。なので警告の表示をOFFにしたり、いろいろとと必要になるわけなのだ。
# csvを転置してRead
import pandas as pd
import warnings
# f_path = ''
# f_name = 'input'
# f_path = './' + f_path + f_name + '.csv'
url = 'https://chanyoguitar.net/wp-content/uploads/2022/09/inputT.csv'
# 転置開始
warnings.simplefilter('ignore') # 警告を無視するように変更
df_org = pd.read_csv(url,
encoding='utf-8' ,# 極たまに「cp932」の指定もあったよ
sep=',' ,
index_col=None
)
warnings.simplefilter('always') # 設定を戻す
buf_df = df_org.T
buf_df.columns = list(buf_df.iloc[0,:])
buf_df.drop(df_org.columns[0] ,inplace=True)
df = buf_df.astype({'湿度[%]':'float64',
'気圧[hpa]':'float64',
'外気温度[℃]':'float64',
'室内温度[℃]':'float64'}
)
# 転置終了
上記コードのポイントはこうだ!
- 自身でも理解できている問題ない警告は表示させない
- df_orgとして最初のオリジナルは取っておいてもいいかもね
- 列名はlistに変換する
- dropメソッド使った後は型を確認し、問題がある個所は変更しておく
ぶっちゃけやりすぎ感があるけど、現場だとなにかと気がぞがれるし、仕事はテキトーに終わらせたいので、コピペが大事だと思っている。
あと、下記が今回使うデータ。read_csvはURL からも読める関数なので、動きだけ見たい場合は上記コピペでうまくいく(はず)。
EXCELのREAD
同階層に「data.xlsx」という名前のエクセルがあるときのREADは下記。関数化もしているので、ぜひ使ってみて!
import pandas as pd
def my_read_excel(excel_file, sheet_name, start_col, end_col, start_row, end_row):
# エクセルファイルの読み込み
df = pd.read_excel(excel_file, sheet_name=sheet_name)
# 読み込むセルの範囲を指定
cells = start_col + str(start_row) + ":" + end_col + str(end_row)
data = df[cells]
return data
# 読み込むエクセルファイルのパス
excel_file = "./data.xlsx"
# 読み込むシート名
sheet_name = "Sheet1"
# 読み込むセルの範囲
start_col = "A"
end_col = "D"
start_row = 1
end_row = 5
# 関数を呼び出し、読み込んだデータを取得
data = my_read_excel(excel_file, sheet_name, start_col, end_col, start_row, end_row)
# 読み込んだデータを表示
print(data)
コメント