Tabla de contenido
2. Indexación y selección de datos
2.1 .loc() selecciona por etiqueta
2.2 .iloc() selecciona por posición
2.3 Obtener datos usando atributos
3.1 Cambio porcentual.pct_change()
3.4 Clasificación de datos.rank()
1. Datos de cadena y texto
Series admite métodos de procesamiento de cadenas, que pueden manipular fácilmente cada elemento de la matriz. Estos métodos excluyen automáticamente los valores nulos y faltantes, que es quizás su característica más importante. Se accede a estos métodos str
a través de los atributos de la Serie. Generalmente, los nombres de estas operaciones son consistentes con los métodos de cadena integrados, como .lower();.upper();.len() y otros métodos básicos.
Ejemplo:
import pandas as pd
import numpy as np
s = pd.Series([' Tom ',' xiaoming ',' john '])
s
#删除空格
s.str.strip()
#字符串分割
s.str.split('o')
#字符串拼接
s.str.cat(sep="<=>")
#辨别分类
s.str.get_dummies()
#字符串包含的内容
s.str.contains('m')
#字符串替换
s.str.replace('o',"dd")
#计数
s.str.count('i')
#对一系列字符串判断是否是数字
s = pd.Series([' Tom ','778899',' xiaoming ',' john '])
s.str.isnumeric()
Resultado de salida:
# 原始Series
0 Tom
1 xiaoming
2 john
dtype: object
# 删除空格
0 Tom
1 xiaoming
2 john
dtype: object
# 字符串以o进行分割
0 [ T, m ]
1 [ xia, ming ]
2 [ j, hn ]
dtype: object
# 字符串拼接
' Tom <=> xiaoming <=> john '
# 辨别分类
Tom john xiaoming
0 1 0 0
1 0 0 1
2 0 1 0
# 字符串包含的内容
0 True
1 True
2 False
dtype: bool
# 字符串替换
0 Tddm
1 xiaddming
2 jddhn
dtype: object
# 计数(字符串中i的数量)
0 0
1 2
2 0
dtype: int64
# 对一系列字符串判断是否是数字
0 False
1 True
2 False
3 False
dtype: bool
2. Indexación y selección de datos
En pandas, además de utilizar el subíndice de índice o el índice de nombre de columna, también puede utilizar .loc();.iloc() para la indexación de datos.
2.1 .loc() selecciona por etiqueta
pandas proporciona un conjunto de métodos para lograr una indexación basada puramente en etiquetas . Este es un acuerdo estricto basado en la inclusión. Cada etiqueta solicitada debe estar en el índice o KeyError
se generará. Al dividir, incluya los límites de inicio y finalización si están presentes en el índice . Los números enteros son etiquetas válidas, pero se refieren a etiquetas en lugar de posiciones .
Esta .loc
propiedad es el principal método de acceso. Las siguientes son entradas válidas:
-
Una etiqueta única, como
5
o'a'
(tenga en cuenta que se5
interpreta como la etiqueta del índice . Este uso no es una posición entera a lo largo del índice). -
Una lista o conjunto de etiquetas.
['a', 'b', 'c']
-
Un objeto de sector etiquetado
'a':'f'
(tenga en cuenta que, a diferencia de los sectores habituales de Python, el inicio y la parada se incluyen en el índice. Consulte Sectores etiquetados ). -
Una matriz booleana.
-
A
callable
, consulte Seleccionar por invocable .
Ejemplo: generar aleatoriamente datos fragmentados de ocho filas para su manipulación
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8,4),index=['a','b','c','d','e','f','g','h'],columns=["A","B","C","D"])
df
# 输出结果
A B C D
a 0.529671 -0.076485 0.379469 1.494926
b -0.082312 -0.328869 0.175183 -0.798430
c 0.681922 0.741320 -0.910726 -2.176608
d 1.500632 -1.165229 0.316722 0.402977
e -2.044217 0.930242 0.433050 0.542472
f 1.332038 0.476599 1.661994 2.102483
g 0.488362 -1.667154 -0.651079 -0.049332
h -0.676308 0.904894 1.592176 0.409881
1. Seleccione todo el contenido de la columna AB (usando el segmento)
#选择A.B列所有的内容,基于标签
df.loc[:,['A','B']]
#输出结果
A B
a 0.529671 -0.076485
b -0.082312 -0.328869
c 0.681922 0.741320
d 1.500632 -1.165229
e -2.044217 0.930242
f 1.332038 0.476599
g 0.488362 -1.667154
h -0.676308 0.904894
2. Seleccione la fila ae, columna después de b (corte)
#选择a-e行,b以后的列
df.loc['a':'e','B':]
# 输出结果:
B C D
a -0.076485 0.379469 1.494926
b -0.328869 0.175183 -0.798430
c 0.741320 -0.910726 -2.176608
d -1.165229 0.316722 0.402977
e 0.930242 0.433050 0.542472
3. Saque los datos mayores que 1 en la etiqueta a.
# 取出a标签里大于一的数据
df.loc['a']>1
# 输出结果
A False
B False
C False
D True
Name: a, dtype: bool
4. Saque el contenido de la columna donde a es mayor que 1
# 取出a大于1的那一列内容
df.loc[:,df.loc['a']>1]
#输出结果:
D
a 1.494926
b -0.798430
c -2.176608
d 0.402977
e 0.542472
f 2.102483
g -0.049332
h 0.409881
2.2 .iloc() selecciona por posición
pandas proporciona un conjunto de métodos para obtener indexación puramente basada en números enteros . La semántica sigue de cerca los sectores de Python y NumPy. Estos son 0-based
índices. Al realizar el corte, se incluyen los límites iniciales y se excluyen los límites superiores . Intentar utilizar un número no entero incluso con una etiqueta válida generará IndexError
.
Esta .iloc
propiedad es el principal método de acceso. Las siguientes son entradas válidas:
-
Un número entero, por ejemplo
5
. -
Una lista o matriz de números enteros.
[4, 3, 0]
-
Un objeto de corte con entradas
1:7
. -
Una matriz booleana.
-
A
callable
, consulte Seleccionar por invocable .
Ejemplo: marco de datos siguiendo el caso anterior
A B C D
a 0.529671 -0.076485 0.379469 1.494926
b -0.082312 -0.328869 0.175183 -0.798430
c 0.681922 0.741320 -0.910726 -2.176608
d 1.500632 -1.165229 0.316722 0.402977
e -2.044217 0.930242 0.433050 0.542472
f 1.332038 0.476599 1.661994 2.102483
g 0.488362 -1.667154 -0.651079 -0.049332
h -0.676308 0.904894 1.592176 0.409881
1. Índice basado en la posición (fila)
# 基于(行)位置的索引
df.iloc[0]
#输出结果:
A 0.529671
B -0.076485
C 0.379469
D 1.494926
Name: a, dtype: float64
df.iloc[1]
#输出结果:
A -0.082312
B -0.328869
C 0.175183
D -0.798430
Name: b, dtype: float64
2. Saque el contenido después de la segunda columna de la tercera fila.
df.iloc[3:,1:]
#输出结果:
B C D
d -1.165229 0.316722 0.402977
e 0.930242 0.433050 0.542472
f 0.476599 1.661994 2.102483
g -1.667154 -0.651079 -0.049332
h 0.904894 1.592176 0.409881
2.3 Obtener datos usando atributos
Para los datos anteriores, en pandas, los datos también se pueden recuperar mediante la adquisición de atributos.
Ejemplo: saque los datos de la columna A y la columna D
#属性获取,取出A列内容
df.A
#输出结果:
a 1.310455
b -1.015628
c 1.281924
d 0.496812
e -1.733183
f 0.140338
g -0.179063
h -0.642013
Name: A, dtype: float64
df.D
#输出结果:
a -0.298131
b -1.141310
c -0.302760
d 1.188531
e -1.608952
f 0.437460
g -0.696010
h -0.525048
Name: D, dtype: float64
3. Funciones estadísticas
Pandas proporciona una variedad de funciones estadísticas para que las utilicen los usuarios, como cambio de porcentaje.pct_change(); covariance.cov(); correlación.corr(); método data ranking.rank()
3.1 Cambio porcentual.pct_change()
Series
Y DataFrame
existe un método .pct_change() para calcular el cambio porcentual para un número determinado de períodos ( use relleno con valores NA/nulo antes defill_method
calcular el cambio porcentual ).
Sintaxis básica:
Series.pct_change()
or
DataFrame.pct_change(periods=行数)
Ejemplo:
import pandas as pd
import numpy as np
#创建基础Series
s = pd.Series([877,865,874,890,912])
s
# 输出结果:
0 877
1 865
2 874
3 890
4 912
dtype: int64
#创建基础dataframe
df = pd.DataFrame(np.random.randn(5, 4))
df
#输出结果
0 1 2 3
0 0.655875 -2.195588 -0.785019 1.122582
1 0.852057 -2.276063 1.528201 -0.167119
2 -1.057979 -0.396548 -0.915528 0.026226
3 -0.490155 1.803235 0.005851 -1.252117
4 0.946558 -2.680471 -0.055739 -0.624553
Obtenga el cambio porcentual:
# 变化的百分比程度(波动变化)
s.pct_change()
#输出结果:
0 NaN
1 -0.013683
2 0.010405
3 0.018307
4 0.024719
dtype: float64
# 变化的百分比程度
df.pct_change(periods=1)
# 输出结果:
0 1 2 3
0 NaN NaN NaN NaN
1 0.299115 0.036653 -2.946706 -1.148870
2 -2.241677 -0.825775 -1.599088 -1.156933
3 -0.536707 -5.547331 -1.006391 -48.742482
4 -2.931143 -2.486479 -10.526903 -0.501202
3.2 Covarianza.cov()
Series.cov() se puede utilizar para calcular la covarianza entre series (excluyendo los valores faltantes).
DataFrame.cov() calcula la covarianza por pares entre series en un DataFrame, excluyendo también los valores NA/nulo.
Ejemplo:
#计算两个Series之间的协方差
s1 = pd.Series(np.random.randn(10))
s2 = pd.Series(np.random.randn(10))
#两个数据的协方差
s1.cov(s2)
#输出结果:
-0.0751790891671201
# 计算dataframe中数据的协方差
frame = pd.DataFrame(np.random.randn(1000, 5), columns=["a", "b", "c", "d", "e"])
frame.cov()
#输出结果:
a b c d e
a 1.000882 -0.003177 -0.002698 -0.006889 0.031912
b -0.003177 1.024721 0.000191 0.009212 0.000857
c -0.002698 0.000191 0.950735 -0.031743 -0.005087
d -0.006889 0.009212 -0.031743 1.002983 -0.047952
e 0.031912 0.000857 -0.005087 -0.047952 1.042487
DataFrame.cov
También se admite una palabra clave opcional min_periods
que especifica el número mínimo de observaciones necesarias para cada par de columnas para obtener resultados válidos. Por ejemplo
marco.cov(min_periods=12)
Observe al menos 12 columnas de datos en el marco de datos y devuelva NaN si no hay suficientes 12 columnas.
3.3 Correlación.corr()
La correlación se puede calcular utilizando el método .coor(). Utilizando este method
parámetro, se proporcionan varios métodos para calcular la correlación:
nombre del método |
describir |
---|---|
|
coeficiente de correlación estándar |
|
Coeficiente de correlación de Kendall Tau |
|
Coeficiente de correlación de rango de Spearman |
Ejemplo:
1. Correlación entre dos series
s1 = pd.Series(np.random.randn(10))
s2 = s1*2
#相关性(s1与s2)
s1.corr(s2)
#输出结果:
0.9999999999999999
2. La correlación entre los tres conjuntos de datos (marco de datos)
s1 = pd.Series(np.random.randn(10))
s2 = s1*2
s3 = pd.Series(np.random.randn(10))
df = pd.DataFrame({
's1':s1,
's2':s2,
's3':s3
})
df
# 输出dataframe
s1 s2 s3
0 -1.149359 -2.298718 0.742016
1 0.476084 0.952168 -0.375759
2 -0.998627 -1.997255 0.721653
3 1.047331 2.094663 -0.078039
4 0.444710 0.889420 -0.525895
5 -0.411778 -0.823557 -0.402789
6 -0.935911 -1.871822 -0.597614
7 -0.652570 -1.305140 0.636498
8 1.055361 2.110722 -0.763907
9 -1.222631 -2.445262 -0.153914
# 三者相关性
df.corr()
#输出结果:
s1 s2 s3
s1 1.000000 1.000000 -0.548589
s2 1.000000 1.000000 -0.548589
s3 -0.548589 -0.548589 1.000000
3.4 Clasificación de datos.rank()
El método .rank() genera un rango de datos donde a las relaciones se les asigna el rango medio del grupo, por ejemplo:
s = pd.Series([877,865,874,890,912])
s
#输出结果:
0 877
1 865
2 874
3 890
4 912
dtype: int64
s.rank()
#输出结果:
0 3.0
1 1.0
2 2.0
3 4.0
4 5.0
dtype: float64
En un marco de datos, ranking() puede clasificar filas ( axis=0
) o columnas ( axis=1
). NaN
Los valores están excluidos del ranking.
rank
Opcionalmente, se toma ascending
un argumento que por defecto es verdadero; si es falso, los datos se clasifican de manera inversa, y los valores más grandes asignan clasificaciones más pequeñas.
rank
Se admiten diferentes métodos de sorteo, method
especificados por parámetros:
average
: Clasificación promedio del grupo empatado
min
: el rango más bajo del grupo
max
: Rango más alto del grupo.
first
: Rangos asignados en el orden en que aparecen en la matriz
4. Funciones de ventana
pandas incluye un conjunto compacto de API para realizar operaciones de ventana: operaciones que realizan agregaciones sobre particiones deslizantes de valores. La API funciona de manera similar a API groupby
, Series y DataFrame con los parámetros necesarios para llamar al método de ventanas y luego llamar a la función de agregación.
pandas admite 4 tipos de operaciones de ventana:
-
Ventanas giratorias: Ventanas genéricas correderas fijas o variables sobre valores.
-
ventana ponderada: ventana ponderada no rectangular proporcionada por la biblioteca
scipy.signal
. -
Ventana Extendida: La ventana sobre la cual se acumulan los valores.
-
Ventanas ponderadas exponencialmente: ventanas de valores acumulativas y ponderadas exponencialmente.
concepto |
método |
objeto devuelto |
Soporte para ventanas basadas en tiempo |
Soporte en grupo encadenado |
Método de la tabla de soporte |
Soporte de operación en línea |
---|---|---|---|---|---|---|
Persiana |
|
|
Sí |
Sí |
Sí>1.3 |
No |
ventana de ponderación |
|
|
No |
No |
No |
No |
ampliar ventana |
|
|
No |
Sí |
Sí>1.3 |
No |
Ventana ponderada exponencialmente |
|
|
No |
es >1.2 |
No |
Sí (desde la versión 1.3) |
Ejemplo:
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(10,4))
df
#输出结果:
0 1 2 3
0 2.599818 0.451315 -0.428038 0.035233
1 0.395523 -0.098377 0.059649 -0.489922
2 0.550164 -0.469461 1.193710 0.567562
3 1.483434 -0.793989 -0.738174 0.515078
4 0.395409 0.425578 -0.439963 -0.207277
5 -0.035479 -1.438315 -0.863333 -0.129948
6 -0.336889 -0.094188 -1.452638 0.083352
7 -0.626117 0.120990 -0.566740 0.665003
8 -1.437816 -0.112235 -0.232150 -0.099910
9 -0.582537 0.388641 1.008226 0.321893
1. persiana enrollable .rolling()
# 滚动窗口求每三行之间的平均值
df.rolling(window=3).mean()
#输出结果:
0 1 2 3
0 NaN NaN NaN NaN
1 NaN NaN NaN NaN
2 1.181835 -0.038841 0.275107 0.037625
3 0.809707 -0.453942 0.171729 0.197573
4 0.809669 -0.279291 0.005191 0.291788
5 0.614455 -0.602242 -0.680490 0.059284
6 0.007681 -0.368975 -0.918644 -0.084624
7 -0.332828 -0.470504 -0.960904 0.206135
8 -0.800274 -0.028478 -0.750509 0.216148
9 -0.882157 0.132465 0.069779 0.295662
2. .expandir para expandir la ventana
#expanding
df.expanding(min_periods=3).mean()
#输出结果:
0 1 2 3
0 NaN NaN NaN NaN
1 NaN NaN NaN NaN
2 1.181835 -0.038841 0.275107 0.037625
3 1.257235 -0.227628 0.021787 0.156988
4 1.084869 -0.096987 -0.070563 0.084135
5 0.898145 -0.320542 -0.202691 0.048455
6 0.721711 -0.288205 -0.381255 0.053440
7 0.553233 -0.237056 -0.404441 0.129885
8 0.332005 -0.223187 -0.385297 0.104352
9 0.240551 -0.162004 -0.245945 0.126106