久しぶりに勉強したら、3.8になってたorz
Windowsの軽量版、こっそり使いたいけど勝手が違う。
python-3.8.0-embed-amd64.zip
ここのサイトを見ながら使えるように(pandas動く)したい
https://qiita.com/mm_sys/items/1fd3a50a930dac3db299
■インストール?
解凍、exeがあるとこでpython起動→インタラクティブ
終了quit()もexit()もエラー
exitする方法(まさかこんなことに困ると思わなかった)
https://takamaruo.hatenablog.com/entry/2018/10/09/232304
from sys import exit
exit()
■pip使えるようにする
python.exeと同じ場所にあるpython38._pthを編集
#import site → コメント解除
get-pip.pyを取得しpython.exeと同じ場所に配置
https://bootstrap.pypa.io/get-pip.py
コマンドプロンプトを起動し、一時的に以下のパスを通す(こっそりだから)
path →確認
set path=%path%;python.exeがある場所\Scripts
python get-pip.py
→パスを通してないとWarning出る
※コマンドは必ずpython.exeがあるところですること
pipがインストールされたか見る
python -m pip list
Package Version
---------- -------
pip 19.3.1
setuptools 41.6.0
wheel 0.33.6
ここにpipが入った
python.exeのあるフォルダ\Scripts\pip.exe
pipでインストールを試す
pip install numpy
ここにnumpyが入る
python.exeがあるフォルダ\Lib\site-packages\numpy
本命のpandas入れる
pip install pandas
pipのインストール一覧を見る
pip list
Package Version
--------------- -------
numpy 1.17.3
pandas 0.25.2
pip 19.3.1
python-dateutil 2.8.0
pytz 2019.3
setuptools 41.6.0
six 1.12.0
wheel 0.33.6
こそこそやってるつもりだが、
C:\Users\ユーザー\AppData\Local\pipがあり、キャッシュフォルダとかできてしまう
むずかしい。。
■ばれないようにドロン
python.exeなどを入れたフォルダごと消す
ここからはpandasとエクセルの話
■エクセルをpandasで読み取る
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_excel.html
xlrdがいるのでインストール
pip install xlrd
エクセル準備
test.xlsx
hoge1 hoge2 hoge3
1 ほげ 2019-11-01
2 ふが NaT
3 NaN 2019-11-01
以下実行
>>> import pandas as pd
>>> df = pd.read_excel('test.xlsx')
>>> print(df)
hoge1 hoge2 hoge3
0 1 ほげ 2019-11-01
1 2 ふが NaT
2 3 NaN 2019-11-01
こんな感じ。
■pandasのDataFrameについてもう少し
カラムの一覧取得
>>> print(df.columns)
Index(['hoge1', 'hoge2', 'hoge3'], dtype='object')
カラムのデータ型を取得
>>> print(df.dtypes)
hoge1 int64
hoge2 object
hoge3 datetime64[ns]
dtype: object
型を指定してエクセルを読み込む場合
https://note.nkmk.me/python-numpy-dtype-astype/
>>> df2 = pd.read_excel('test.xlsx', dtype={'hoge1':object, 'hoge3':object})
>>> print(df2.dtypes)
hoge1 object
hoge2 object
hoge3 datetime64[ns]
dtype: object
一気に全部の型を指定(objectなら一気に行けそうだが、ほかの型は微妙)
>>> df3 = pd.read_excel('test.xlsx', dtype='object')
>>> print(df3.dtypes)
hoge1 object
hoge2 object
hoge3 datetime64[ns]
dtype: object
空セルのNaNを変換
>>> df.fillna('')
hoge1 hoge2 hoge3
0 1 ほげ 2019-11-01 00:00:00
1 2 ふが
2 3 2019-11-01 00:00:00
dtype: object
↑の場合、戻り値指定していないため、dfはNaNのまま!
df=df.fillna('')
こうするとdfが上書きされる
■脱線するがdfの比較をする方法
これでエクセルファイルの比較をした
https://hack-le.com/pandas-2-true-false-10/
dfとdf2を比較する
>>> print(df)
hoge1 hoge2 hoge3
0 1 ほげ 2019-11-01
1 2 ふが NaT
2 3 NaN 2019-11-01
>>> print(df2)
hoge1 hoge2 hoge3
0 1 ほげ 2019-11-01
1 2 ふが NaT
2 3 NaN 2019-11-01
>>> print(df.dtypes)
hoge1 int64
hoge2 object
hoge3 datetime64[ns]
dtype: object
>>> print(df2.dtypes)
hoge1 object
hoge2 object
hoge3 datetime64[ns]
dtype: object
dfとdf2をキーhoge1でマージ(複数キー指定の場合はこうする→on=['key1', 'key2'])
>>> dfmg=pd.merge(df,df2, on='hoge1', how='inner')
>>> print(dfmg)
hoge1 hoge2_x hoge3_x hoge2_y hoge3_y
0 1 ほげ 2019-11-01 ほげ 2019-11-01
1 2 ふが NaT ふが NaT
2 3 NaN 2019-11-01 NaN 2019-11-01
列同士を比較し結果を入れる列を作成
>>> dfmg['hoge2_comp']=(dfmg['hoge2_x']==dfmg['hoge2_y'])
>>> dfmg['hoge3_comp']=(dfmg['hoge3_x']==dfmg['hoge3_y'])
>>> print(dfmg)
hoge1 hoge2_x hoge3_x hoge2_y hoge3_y hoge2_comp hoge3_comp
0 1 ほげ 2019-11-01 ほげ 2019-11-01 True True
1 2 ふが NaT ふが NaT True False
2 3 NaN 2019-11-01 NaN 2019-11-01 False True
hoge3が一致しない行だけ抽出し、一致しなかった値を出力
>>> r=dfmg['hoge3_comp']==False
>>> print(dfmg.loc[r,['hoge1','hoge3_x','hoge3_y']])
hoge1 hoge3_x hoge3_y
1 2 NaT NaT
NaTとかNaNは比較するとNGになる?ちゃんと消してから比較しないとダメ。
わざわざMergeしなくても比較できそうだが、
必ずしもデータが一致していないエクセルの比較だったのでMergeした
■python3.8について
新しい機能が増えててショック・・・
・セイウチ演算子
変数への代入と変数の使用を同時に行える
>>> a = 'hoge'
>>> (n := len(array)) > 4
False
※代入して比較する際にはセイウチ演算子の範囲をかっこで囲む必要あり
ほかにもあるがとりあえずまた今度。
Windowsの軽量版、こっそり使いたいけど勝手が違う。
python-3.8.0-embed-amd64.zip
ここのサイトを見ながら使えるように(pandas動く)したい
https://qiita.com/mm_sys/items/1fd3a50a930dac3db299
■インストール?
解凍、exeがあるとこでpython起動→インタラクティブ
終了quit()もexit()もエラー
exitする方法(まさかこんなことに困ると思わなかった)
https://takamaruo.hatenablog.com/entry/2018/10/09/232304
from sys import exit
exit()
■pip使えるようにする
python.exeと同じ場所にあるpython38._pthを編集
#import site → コメント解除
get-pip.pyを取得しpython.exeと同じ場所に配置
https://bootstrap.pypa.io/get-pip.py
コマンドプロンプトを起動し、一時的に以下のパスを通す(こっそりだから)
path →確認
set path=%path%;python.exeがある場所\Scripts
python get-pip.py
→パスを通してないとWarning出る
※コマンドは必ずpython.exeがあるところですること
pipがインストールされたか見る
python -m pip list
Package Version
---------- -------
pip 19.3.1
setuptools 41.6.0
wheel 0.33.6
ここにpipが入った
python.exeのあるフォルダ\Scripts\pip.exe
pipでインストールを試す
pip install numpy
ここにnumpyが入る
python.exeがあるフォルダ\Lib\site-packages\numpy
本命のpandas入れる
pip install pandas
pipのインストール一覧を見る
pip list
Package Version
--------------- -------
numpy 1.17.3
pandas 0.25.2
pip 19.3.1
python-dateutil 2.8.0
pytz 2019.3
setuptools 41.6.0
six 1.12.0
wheel 0.33.6
こそこそやってるつもりだが、
C:\Users\ユーザー\AppData\Local\pipがあり、キャッシュフォルダとかできてしまう
むずかしい。。
■ばれないようにドロン
python.exeなどを入れたフォルダごと消す
ここからはpandasとエクセルの話
■エクセルをpandasで読み取る
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_excel.html
xlrdがいるのでインストール
pip install xlrd
エクセル準備
test.xlsx
hoge1 hoge2 hoge3
1 ほげ 2019-11-01
2 ふが NaT
3 NaN 2019-11-01
以下実行
>>> import pandas as pd
>>> df = pd.read_excel('test.xlsx')
>>> print(df)
hoge1 hoge2 hoge3
0 1 ほげ 2019-11-01
1 2 ふが NaT
2 3 NaN 2019-11-01
こんな感じ。
■pandasのDataFrameについてもう少し
カラムの一覧取得
>>> print(df.columns)
Index(['hoge1', 'hoge2', 'hoge3'], dtype='object')
カラムのデータ型を取得
>>> print(df.dtypes)
hoge1 int64
hoge2 object
hoge3 datetime64[ns]
dtype: object
型を指定してエクセルを読み込む場合
https://note.nkmk.me/python-numpy-dtype-astype/
>>> df2 = pd.read_excel('test.xlsx', dtype={'hoge1':object, 'hoge3':object})
>>> print(df2.dtypes)
hoge1 object
hoge2 object
hoge3 datetime64[ns]
dtype: object
一気に全部の型を指定(objectなら一気に行けそうだが、ほかの型は微妙)
>>> df3 = pd.read_excel('test.xlsx', dtype='object')
>>> print(df3.dtypes)
hoge1 object
hoge2 object
hoge3 datetime64[ns]
dtype: object
空セルのNaNを変換
>>> df.fillna('')
hoge1 hoge2 hoge3
0 1 ほげ 2019-11-01 00:00:00
1 2 ふが
2 3 2019-11-01 00:00:00
dtype: object
↑の場合、戻り値指定していないため、dfはNaNのまま!
df=df.fillna('')
こうするとdfが上書きされる
■脱線するがdfの比較をする方法
これでエクセルファイルの比較をした
https://hack-le.com/pandas-2-true-false-10/
dfとdf2を比較する
>>> print(df)
hoge1 hoge2 hoge3
0 1 ほげ 2019-11-01
1 2 ふが NaT
2 3 NaN 2019-11-01
>>> print(df2)
hoge1 hoge2 hoge3
0 1 ほげ 2019-11-01
1 2 ふが NaT
2 3 NaN 2019-11-01
>>> print(df.dtypes)
hoge1 int64
hoge2 object
hoge3 datetime64[ns]
dtype: object
>>> print(df2.dtypes)
hoge1 object
hoge2 object
hoge3 datetime64[ns]
dtype: object
dfとdf2をキーhoge1でマージ(複数キー指定の場合はこうする→on=['key1', 'key2'])
>>> dfmg=pd.merge(df,df2, on='hoge1', how='inner')
>>> print(dfmg)
hoge1 hoge2_x hoge3_x hoge2_y hoge3_y
0 1 ほげ 2019-11-01 ほげ 2019-11-01
1 2 ふが NaT ふが NaT
2 3 NaN 2019-11-01 NaN 2019-11-01
列同士を比較し結果を入れる列を作成
>>> dfmg['hoge2_comp']=(dfmg['hoge2_x']==dfmg['hoge2_y'])
>>> dfmg['hoge3_comp']=(dfmg['hoge3_x']==dfmg['hoge3_y'])
>>> print(dfmg)
hoge1 hoge2_x hoge3_x hoge2_y hoge3_y hoge2_comp hoge3_comp
0 1 ほげ 2019-11-01 ほげ 2019-11-01 True True
1 2 ふが NaT ふが NaT True False
2 3 NaN 2019-11-01 NaN 2019-11-01 False True
hoge3が一致しない行だけ抽出し、一致しなかった値を出力
>>> r=dfmg['hoge3_comp']==False
>>> print(dfmg.loc[r,['hoge1','hoge3_x','hoge3_y']])
hoge1 hoge3_x hoge3_y
1 2 NaT NaT
NaTとかNaNは比較するとNGになる?ちゃんと消してから比較しないとダメ。
わざわざMergeしなくても比較できそうだが、
必ずしもデータが一致していないエクセルの比較だったのでMergeした
■python3.8について
新しい機能が増えててショック・・・
・セイウチ演算子
変数への代入と変数の使用を同時に行える
>>> a = 'hoge'
>>> (n := len(array)) > 4
False
※代入して比較する際にはセイウチ演算子の範囲をかっこで囲む必要あり
ほかにもあるがとりあえずまた今度。