-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpandas-test.txt
254 lines (197 loc) · 8.52 KB
/
pandas-test.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
◯pandas 定義
import pandas as pd
◯csv読み込み
df = pd.read_csv('xxxxx.csv')
〇同ヘッダ縦結合
df3 = df.append(def2)
◯統計量確認
df.describe()
◯欠損値確認
df.isnull().sum()
◯df概要確認
df.head()
◯データ結合(concat)
df = pd.concat([df_1, df_2], ignore_index=True)
appendとの違いは、concatはリスト型でDataFrameを渡すので、
2つ以上の複数のDataFrameをまとめて結合することができます。
https://ai-inter1.com/pandas-dataframe_union/
◯データ結合(append) ユニオン
DataFrame1.append(DataFrame2, ignore_index=True/False)
引数ignore_indexでは、元のDataFrameのインデックスを破棄して
新たに振りなおす場合、Trueを指定し、元のインデックスを継承す
る場合はFalseを指定します。何も指定しないとFalseになります。
ignore_indexについては、元々のDataFrameのインデックスが連番で
振ってあるのであれば、新たに振りなおせるようTrueに設定する方
が良いです。
また元のDataFrameのインデックスがProduct IDなど、そのデータを
ユニークに特定する情報を持つ列に対して設定されているのであれば、
そのままのインデックスを使えるようFalseに設定すれば良いです。
https://ai-inter1.com/pandas-dataframe_union/
◯行数確認
print(len(df))
◯merge データ結合 ジョイン
join_df = pd.merge(df1, df2[["x", "y", "z"]], on="x", how="left")
ジョインキー を x として、merge 引数に主軸のdf および、追加するdf2行項目のx,y,zを引数に、yzを主軸df1を左に配置しジョインする
◯必要なデータの作成
(例)合計列の作成
df["price"] = df["quantity"] * df["item_price"]
◯集計
print(df["price"].sum())
※できるなら検算しておく
◯ 期間範囲確認 期間があるものは確認すると良い
print(df["date(例)"].min())
print(df["date(例)"].max())
◯データ型確認
df.dtypes
◯object型からdatetime型に変更 (年月列作成)
df["date"] = pd.datetime(df["date"] )
df["month"] = df["date"] .dt.strftime("%Y%m")
df[["date","month"]].head()
◯月別集計
df.groupby("month").sum()["price(例)"]
◯まとめたい列が複数ある場合の項目別集計
(例)月別、商品別集計
df.groupby(["month","item"]).sum()[["price","quantity"]]
◯ピボットテーブル集計
pd.pivot_table(df, index='item', columns='month', values=['price', 'quantity'], aggfunc='sum')
○ピボットテーブルをdfに変換
df2 = pd.pivot_table(df, index='item', columns='month', values=['price', 'quantity'], aggfunc='sum')
df2.head()
◯総行数確認・属性タイプ・非null個数確認
df.info()
◯カテゴリ確認・カテゴリ別個数確認
df["header-koumoku"].value_counts()
◯ヒストグラムで可視化
%matplotlib inline
import matplotlib.pyplot as plt
df.hist(bins=50, figsize=(20,15))
plt.show()
◯font 表示設定
df.head().style.set_table_attributes('style="font-size: 17px"')
◯出力行設定
import pandas as pd
#現在の最大表示行数の出力
pd.get_option("display.max_rows")
#最大表示行数の指定(ここでは50行を指定)
pd.set_option('display.max_rows', 50) #最初に定義しておくと良い
◯データフレームの保存
joblib.dump(df, './sample.pkl')
joblib.dumpという関数を利用して、データフレームをファイルとして保存できる。 上記の場合、.pyファイルを実行、もしくはjupyter-notebookを起動したカレントディレクトリにファイルが保存される。
◯データフレームの読み込み
df2 = joblib.load('./sample.pkl')
◯元df と保存df=df2の検証
df == df2
◯エクセルの読み込み
pd.reae_excel("///.xls")
※シリアル値のpythonとエクセルの違いに注意
シリアル値の意味がわからない場合は要検索
◯小文字を大文字に変換
df.str.upper()
◯空欄の半角から全角変換
df.str.replace(" "," ")
→特定行のみであれば
df["a"] = df["a"].df.str.replace(" "," ") でOK
○特定値をキーにソート
df.sort_values(by=["a"], ascending=True)
○ユニークデータの検証
print(pd.unique(df["a"])) 内容確認
print(len(pd.unique(df["a"]))) 数確認
○行列転換
df = df.T
print(df)
元のオブジェクト自体を変更
元のオブジェクト自体を変更するinplaceのような引数は用意されていない。
新たなオブジェクトを生成したくない場合は元のオブジェクト自体に代入すればよい。
(参考)
https://note.nkmk.me/python-pandas-t-transpose/
〇指定行削除
ex1501.drop(ex1501.index[[0,1,2,3,4,6]])
10.3 追加
〇指定行削除
ex1501.drop(ex1501.index[[0,1,2,3,4,6]])
〇列削除
df.frop(columns='1st')
〇列複数削除
ex1501.drop(ex1501.columns[[0,1,2,3,4,6]],axis=1) ##cf defaultはaxis=0 (行の意味)
※dropメソッドの引数にinplace=Trueを加えるとdf自体を更新
〇
1-2行目を削除する場合です。
dataDelete = data.drop(range(1, 3))
https://it-ojisan.tokyo/pandas-range-row-delete/
〇
$ cat sample.py
#!/usr/bin/env python3
# coding: UTF-8
import pandas as pd
data = pd.read_csv('in.txt', names=('id', 'value'))
print(data)
print("\n1行目を削除")
dataDelete = data.drop(1)
print(dataDelete)
print("\n0-1行目を削除")
dataDelete = data.drop(range(2))
print(dataDelete)
print("\n1-2行目を削除")
dataDelete = data.drop(range(1, 3))
print(dataDelete)
print("\n0-1行目以外を削除")
dataDelete = data.iloc[range(2), :]
print(dataDelete)
print("\n先頭の2行以外を削除")
dataDelete = data.head(2)
print(dataDelete)
print("\n最後の2行以外を削除")
dataDelete = data.tail(2)
print(dataDelete)
〇add columns list
list = ["time2","temp2"]
df.columns=list
df
2.データ読み込み後
現在ついている列名を何に変更するかを、columnsの後に辞書型で指定する
#変更前のデータフレーム名をdfとする
df = df.rename(columns={'A':'id', 'B':'gender', 'C':'generation'})
行をインデックスに指定して読み込み
何も指定せずread_csvで読み込むと、行番号を自動的に連番で振ってくれるが、
csvファイル中に行のインデックスに該当する列がある場合は、それを指定することもできる。
df = read_csv("csvへのパス", index_col="インデックスにする列名") OK
〇読み込み時に、➀ヘッダー指定、⓶インデックス指定、➂削除指定
pd.set_option('display.max_rows', None)
pd.set_option('display.max_columns', None)
ex1501test = pd.read_excel("/notebooks/workspace/pastdata/201501.xls",header=6,index_col="日付")
ex1501test = ex1501test.drop(ex1501test.index[[32,33,34,35,36,37]])
〇複数のつのcsvを読取、編集実施、df保存、合算
〇dump data to csv
dump_data.to_csv("dump_data.csv", index=False)
〇新規列追加 ※全ての行に指定dataを反映する
(df[“onaji”]=99)
○データの大きさ確認
df.shape
○応用 抽出 cf.kaggle
左から何番目までのcolumnsにおいて、data-typeが int64,float64のものをすべて定義
num_cols = [col for col in trn.coumns[:24] if trn[col].dtype in ['int64', 'float64']]
trn[num_cols].describe()
○応用 抽出 カテゴリ
for col in cat_cols:
uniq = np.unique(trn[col].astype(str))
print('-' * 50)
print('# col {}, n_uniq {}, uniq {}'.format(col, len(uniq), uniq))
○指定行数を抽出
https://prograshi.com/language/python/python_pandas_read_csv/
先頭から読み込む行数を指定する方法
オプションにnrows=整数を記述
行数が膨大にある時に、中身を確認する場合などに便利
▼例:nrows=3
上から3行目まで読み込む。
import pandas as pd
df = pd.read_csv('~/desktop/test.csv', nrows=3)
df
○ファイルへの保存(path_or_buf)
path_or_bufに保存先のファイルパスを指定することで保存できる。
df.to_csv("sample01.csv")
○保存時ヘッダー、インデックスありなし指定: 引数header, index
https://note.nkmk.me/python-pandas-to-csv/
ヘッダー(列名、pandas.DataFrameのcolumns)、インデックス(行名、pandas.DataFrameのindex)の
ありなしは引数header, indexにTrue or Falseで指定する。
df.to_csv('data/dst/to_csv_out_header_index.csv', header=False, index=False)