-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPandas.txt
368 lines (222 loc) · 9.1 KB
/
Pandas.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
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
Pegar uma feature tipo Bernoulli, separar em duas colunas e concatenar ao dataset inicial
target=df.Status
inputs=df.drop("Status", axis="columns")
dummies=pd.get_dummies(inputs, Sex)
input =pd.concat([inputs, dummies],axis='columns')
input.head(3)
input.drop("Sex", axis="columns", inplace=True)
input.head(3)
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Feeding missing values with the mean:
input.Age=input.Age.fillna(input.Age.mean())
input.head(3)
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Concatenar:
In [4]: frames = [df1, df2, df3]
In [5]: result = pd.concat(frames)
ufo = pd.read_csv("http://bit.ly/uforeports")
ufo.head(3)
ufo.loc[0, :]
ufo[ufo.City=="Oakland"]
ufo.loc[ufo.City=="Oakland", :]
ufo.loc[ ; , "Shape Reported" : "Time"]
ufo.loc[0 , 0:2] --> inclui a coluna 0 e a 2
ufo.iloc[ 0 , 0:2] --> náo inclui a coluna 2 -- o I é de inteiro, ou seja, não precisa escrever o label.
drinks = pd.read_('http://bit.ly/drinksbycountry' , index_col='country')
drinks.set_index('country', inplace=True) #coloca indices nas linhas também
drinks.head(3)
#agora é possivel consulta da seguinte forma:
drinks.loc['Brazil' , 'beer_servings']
drinks.continent.value_counts() #pivot da coluna continente
#Avaliacao de uma feature:
Seniors_Churn = df_churn[df_churn.Churn == 'Yes'].groupby('SeniorCitizen').count()['customerID']
Seniors_NC = df_churn.groupby('SeniorCitizen').count()['customerID']
#focusing
index => linha
axis => coluna
s = pd.Series([3, -5, 7, 4], index=['a', 'b', 'c', 'd'])
df.isnull().sum()
df.sort_values(by='Português', ascending=False)
# Tabela Pivot:
df1= df.pivot_table('NUM_BO',index=["DESCR_PROFISSAO"],aggfunc='count',margins=True)
df1.sort_values(by=['NUM_BO'])
df1.sort_values(by=['NUM_BO'], ascending=False)
df2=df.loc[(df["ANO_BO"]==2007)]
df3 = df2.pivot_table('NUM_BO',index=["DESCR_PROFISSAO","ANO_BO"],aggfunc='count',margins=True)
df3.sort_values(by=["NUM_BO"], ascending=False)
#Selecionando:
df.loc[1] # seleciona linha 1
df.loc[:,'NUM_BO'] #a coluna toda
df.loc[df['Matemática'] < 6]
df[(df['Matemática'] < 6) & (df['Português'] < 6)]
#transposição linha x coluna
df.T
#exclui coluna
df.drop(columns=['Nome'])
ou
df.drop('coluna', inplace=True, axis=1)
#Removendo linhas pelo index
s.drop([0, 1])
axis=0 # quer dizer linha, mas axis =0 é default
#Removendo colunas utilizando o argumento axis=1
df.drop('País', axis=1)
#exclui linha
df.drop(1)
#alterando
df.loc[1,'Nome']= "Ana Maria"
#rename de colunas
df.columns = "Nome.", "Matemática.", "Português."
#estatísticas:
df.mean()Returns the mean of all columns
df.corr()Returns the correlation between columns in a data frame
df.count()Returns the number of non-null values in each data frame column
df.max()Returns the highest value in each column
df.min()Returns the lowest value in each column
df.median()Returns the median of each column
df.std()Returns the standard deviation of each column
#Localizar isnull
df.isnull()
dataset.isnull().sum()
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.isnull.html
#Elimina toda linha que tiver um valor null
df2.isnull().sum()
dataset.dropna(how='all', inplace=True) #remove somente as linhas que estiverem com todas as colunas nulas
#Preencher campos:
dataset.fillna(0,inplace=True) # preenche todos os campos que estiverem nulos com o valor 0
dataset.fillna(dataset['fixed acidity'].mean()) #preenche com valores médios
#Criando um dicionário onde cada chave será uma coluna do DataFrame
data = {
'País': ['Bélgica', 'Índia', 'Brasil'],
'Capital': ['Bruxelas', 'Nova Delhi', 'Brasília'],
'População': [123465, 456789, 987654]
}
#Criando o DataFrame
>>> df = pd.DataFrame(data, columns=['País','Capital','População'])
#Para ler arquivos CSV codificados em ISO
>>> pd.read_csv('nome_do_arquivo.csv', encoding='ISO-8859-1')
#Para escrever arquivos CSV
>>> df.to_csv('nome_do_arquivo_para_salvar.csv')
>>> xlsx = pd.ExcelFile('seu_arquivo_excel.xlsx')
>>> df = pd.read_excel(xlsx, 'Planilha 1')
#Removendo linhas pelo index
s.drop([0, 1])
#Removendo colunas utilizando o argumento axis=1
df.drop('País', axis=1)
#Quantidade de linhas e colunas do DataFrame
>>> df.shape
#Descrição do Index
>>> df.index
#Colunas presentes no DataFrame
>>> df.columns
#Contagem de dados não-nulos
>>> df.count()
@Criando uma nova coluna em um dataframe
>>> df['Nova Coluna'] = 0
Renomeando colunas de um DataFrame
#Se seu DataFrame possui 3 colunas, passe 3 novos valores em uma lista
df.columns = ['Coluna 1', 'Coluna 2', 'Coluna 3']
Resumo dos dados:
#Soma dos valores de um DataFrame
>>> df.sum()
#Menor valor de um DataFrame
>>> df.min()
#Maior valor
>>> df.max()
#Index do menor valor
>>> df.idmin()
#Index do maior valor
>>> df.idmax()
#Resumo estatístico do DataFrame, com quartis, mediana, etc.
>>> df.describe()
#Média dos valores
>>> df.mean()
#Mediana dos valores
>>> df.median()
Aplicando funções:
#Aplicando uma função que substitui a por b
df.apply(lambda x: x.replace('a', 'b'))
Ordenando valores:
#Ordenando em ordem crescente
df.sort_values()
#Ordenando em ordem decrescente
df.sort_values(ascending=False)
Operações aritméticas em Series:
>>> s = pd.Series([1, 2, 3, 4, 5], index=['a', 'b', 'c', 'd', 'e'])
#Somando todos os valores presentes na Series por 2
>>> s.add(2)
#Subtraindo 2 de todos os valores
>>> s.sub(2)
#Multiplicando todos os valores por 2
>>> s.mul(2)
#Dividindo valores por 2
>>> s.div(2)
Indexação por Boolean:
#Filtrando o DataFrame para mostrar apenas valores pares
df[df['População'] % 2 == 0]
Selecionando valores:
#Selecionando a primeira linha da coluna país
df.loc[0, 'País']
moda:
print(train_df['Age'].mode())
print(example_series.mode())
Amplitude:
print(train_df['Age'].max() - train_df['Age'].min())
print(example_series.max() - example_series.min())
Variancia:
print(train_df['Age'].var())
print(example_series.var())
Desvio Padrão:
print(train_df['Age'].std())
print(example_series.std())
Descio Absoluto:
print(train_df['Age'].mad())
print(example_series.mad())
Covariância e Correlação
print(train_df.cov())
print(train_df.corr())
Histograma:
%matplotlib notebook
dataset['price'].hist(bins=30)
%matplotlib notebook
dataset[['bedrooms','bathrooms']].hist(bins=30,alpha=0.5,color='Green')
BoxPlot
%matplotlib notebook
matplotlib.style.use('ggplot') #mudar o estilo do gráfico
dataset.boxplot(column='bedrooms')
#estilos disponíveis use o comando: matplotlib.style.available.
Para somente uma coluna:
%matplotlib notebook
dataset.boxplot(column='price', by='bedrooms')
Tabelas Pivot
As tabelas pivot são úteis para fazer agrupamentos nos dados. Dominando o Pandas
Essa funcionalidade é bastante eficiente e nos dar uma enorme vantagem em termos de tempo e desempenho computacional.
Imagine fazer agrupamento de bases de dados muito grande na mão?
Por exemplo, se quisermos contar a quantidade de imóveis agrupados pelos que têm e não tem visão para o mar e ainda pelo número de andares?
Veja como isso pode ser fácil:
dataset.pivot_table('id',index=["waterfront","floors"],aggfunc='count',margins=True)
df.pivot_table('NUM_BO',index=["CIDADE"],aggfunc='count',margins=True)
O método pivot_table() recebe o primeiro parâmetro “id” que a coluna será o resultado da contagem dos dados agrupados.
O parâmetro “index” são as colunas que quero agrupar.
O parâmetro “aggfunc” uso para definir a função de agregação, no meu caso fiz a contagem dos dados, mas é possível fazer soma, calcular a média entre outras operações.
E por fim, o último parâmetro “margins” definido como “true” para imprimir o total de registros na última linha.
Crosstab:
pd.crosstab(dataset['bedrooms'],dataset['condition'])
Avaliando em forma gráfica:
table = pd.crosstab(dataset['bedrooms'],dataset['condition'])
table.plot(kind='bar',width=1.0, color=['red','yellow','orange','blue','green'], title='Condition by Bedrooms' ,grid=False)
Excel:
dataframe_excel = pd.read_excel('/home/rodrigo/Downloads/Controle-de-Atividades-2.0.xlsx', sheetname=0, header=1)
dataframe_excel.head()
Criando index
file = '/home/rodrigo/Downloads/Controle-de-Atividades-2.0.xlsx'
dataframe_excel = pd.read_excel(file, sheetname=0, header=1, index_col=3)
dataframe_excel.head()
#O parâmetro index_col recebe o número da coluna que queremos indexar, nesse caso quero a coluna “Estado Atual” na posição 3 (as posições das colunas iniciam com 0).
#Com o Dataframe indexado pela coluna “Estado Atual” vou ordená-lo:
dataframe_excel.sort_index()
http://minerandodados.com.br/index.php/2017/11/10/dominando-o-pandas-datascience-dozero/#Tabelas_pivot
Gerar excel:
gerar um arquivo a partir do Dataframe
colunas=['id','price','bedrooms','bathrooms','sqft_living','floors','waterfront']
dataset[colunas].head()
dataset[colunas].to_excel('planilha_pandas.xls',index=False)