Pandas-03 (datos de cadena y texto, datos de índice y selección, funciones estadísticas, funciones de ventana)

Tabla de contenido

1. Datos de cadena y texto

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. Funciones estadísticas

3.1 Cambio porcentual.pct_change()

3.2 Covarianza.cov()

3.3 Correlación.corr()

3.4 Clasificación de datos.rank()

4. Funciones de ventana


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 KeyErrorse 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 .locpropiedad es el principal método de acceso. Las siguientes son entradas válidas:

  • Una etiqueta única, como 5o 'a'(tenga en cuenta que se 5interpreta 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.

  • 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 .ilocpropiedad 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.

  • 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()

SeriesY DataFrameexiste 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.covTambién se admite una palabra clave opcional min_periodsque 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 methodparámetro, se proporcionan varios métodos para calcular la correlación:

nombre del método

describir

pearson (default)

coeficiente de correlación estándar

kendall

Coeficiente de correlación de Kendall Tau

spearman

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). NaNLos valores están excluidos del ranking.

rankOpcionalmente, se toma ascendingun 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.

rankSe 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:

  1. Ventanas giratorias: Ventanas genéricas correderas fijas o variables sobre valores.

  2. ventana ponderada: ventana ponderada no rectangular proporcionada por la biblioteca scipy.signal.

  3. Ventana Extendida: La ventana sobre la cual se acumulan los valores.

  4. 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

rolling

Rolling

Sí>1.3

No

ventana de ponderación

rolling

Window

No

No

No

No

ampliar ventana

expanding

Expanding

No

Sí>1.3

No

Ventana ponderada exponencialmente

ewm

ExponentialMovingWindow

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

Supongo que te gusta

Origin blog.csdn.net/damadashen/article/details/126901690
Recomendado
Clasificación