Python computación científica: pandas

Python computación científica: pandas

estructura de datos trama de datos pandas provisto de un JSON cuña alto grado, la conversión es muy conveniente

Series y trama de datos de dos estructura de datos de núcleo, lo que representa una estructura de dos dimensiones de mesa y la secuencia de una dimensión, en base a estas dos estructuras de datos, los datos se pueden importar pandas como

Las estructuras de datos: Serie y trama de datos

diccionario serie es una secuencia de longitud fija, cuando se almacenan, que corresponden a dos ndarray, estructura de diccionario, y esta es la diferencia más grande, debido a que la estructura del diccionario, el número de elementos no es fijo

Hay dos propiedades básicas, valores de índice, y, en una disposición en serie, por defecto índice es 0, 1, ...... creciente secuencia de número entero, puede especificar el índice, tales como el índice = [ 'a', 'b', 'c ']

import pandas as pd 
from pandas import Series , DataFrame
x1 = Series([1,2,3,4])
x1 = Series(data = [1,2,3,4], index = ['a' , ' b' , 'c' , 'd'])
print x1
print x2

0 1

1 2

2 3

3 4

dtype: Int64

un 1

b 2

c 3

d 4

dtype: Int64

El x1 índice es el índice del valor predeterminado, x2 se especifica ha sido, en frente de los datos (valores), seguido por el índice

O puede utilizar una forma para crear el diccionario de serie:

d = {'a' :1,'b':2,'c':3,'d':4}
x3 = Series(d)
print x3

Trama de datos de estructuras de datos de base de datos de tipo de tabla similares

Que comprenden los índices de fila y columna pueden ser considerados como trama de datos indexada por el mismo tipo de diccionario que consiste Series

Algunos estudiantes quieren resultados de las pruebas de salida:

import pandas as pd
from pandas import  Series,DataFrame
data = {'Chineses' :[66,96,93,90,80],'English':[75,65,85,88,90],'Math':[30,98,66,77,90]}
df1 = DataFrame(data)
df2 = DataFrame(data,index = ['Zhangfei','Guanyu','Zhaoyun','Huangzhong','Dianwei'],columns=['English','Math','Chineses'])
print df1
print df2

índice de la columna gl2 es [ 'Inglés', 'Matemáticas', 'chinos'], el índice de la fila es [ 'Zhangfei', 'Guanyu', 'Zhaoyun', 'Huangzhong', 'Dianwei'], el gl2 salida es:

                                            English       Math     Chineses
Zhangfei                         75                  30         66
Guanyu                           65                  98         96
Zhaoyun                        85                  66          93
Huangzhong                88                 77           90
Dianwei                         90                 90             80

importación y exportación de datos

Pandas permite importar datos de xlsx, csv, o puede ser la salida a xlsx, csv, etc.

import pandas as pd
from pandas import  Series,DataFrame
score = DataFrame(pd.read_excel('data.xlsx'))
score.to_excel('datal.xlsx')
print score

Si durante el funcionamiento de la caja puede faltar y el paquete XLRD openpyxl mediante la instalación de pepita instalar

limpieza de datos

data = {'Chineses' :[66,96,93,90,80 ],'English':[75,65,85,88,90],'Math':[30,98,66,77,90]}
df2 = DataFrame(data,index= ['Zhangfei','Guanyu','Zhaoyun','Huangzhong','Dianwei'],columns=['English','Math','Chineses'])

proceso de limpieza, en general, la experiencia de lo siguiente:

1. Retire trama de datos filas y columnas innecesarias

Uso gota () para eliminar filas o columnas no deseados, como tratando de lenguaje de eliminación que la columna

df2 = df2.drop(columns=['Chineses'])

Zhang Fei desea eliminar esta línea

df2 = df2 . drop(index = ['Zhangfei'])
2. Cambiar el nombre que figura en las columnas, hacen que sea más fácil identificar una lista de nombres

El uso de cambio de nombre (columnas = new_names, inplace = true) función, como los chinos -> TuWen, en inglés> Yingyu

df2.rename(columns={'Chineses':'YuWen' , 'English':'YingYu' } , inplace = True)
3, eliminar valores duplicados

drop_duplicates () eliminar automáticamente las filas duplicadas

df = df.drop_duplicates()  #去掉重复行

4. problemas de formato

Cambio de formato de datos

En muchos casos formatos de datos no estándar, utilizando las funciones de formato astype canónicos, como el cambio automáticamente el valor de tipo str chinos, o Int64

df2['Chineses'].astype('str')
df2['Chineses'].astype(np.int64)
Entre el espacio de datos

Str primera convertido en el tipo de formato es para facilitar la manipulación de los datos, a continuación, desea eliminar los espacios entre los datos, el uso de la función de la tira

#删除左右两边空格
df2['Chineses'] = df2['Chineses'].map(str.strip)
#删除左边的空格
df2['Chineses'] = df2['Chineses'].map(str.lstrip)
#删除右边的空格
df2['Chineses'] = df2['Chineses'].map(str.rstrip)

También puede utilizar la función de la tira para eliminar un símbolo especial, si el símbolo chinos campo de dólar

df2['Chineses'] = df2['Chineses'].str.strip('$')
caso de conversión

unificadas nombres, nombres de ciudades, etc., pueden ser utilizados en el caso de la conversión, puede utilizar la parte superior (), inferior (), título ()

#全部大写
df2.columns = df2.columns.str.upper()
#全部小写
df2.columns = df2.columns.str.lower()
#首字母大写
df2.columns = df2.columns.str.title()
hallazgo nulo

Puede haber algunos campos valores nulos Nan, buscará una función con isnull

Si desea ver qué lugar hay un valor nulo NaN, puede df.isnull para los df tabla de datos (), el resultado es que la hipótesis nula verdadera

Quiere saber que hay una columna nula, puede utilizar df.isnull (). Cualquier (), el resultado es que la hipótesis nula verdadera

Aplicar la función utilizando la depuración de los datos

El valor de la columna de nombre será capitalizado transformación:

df['name']  =  df['name'].apply(str.upper)

funciones definidas, se aplican en uso, la función se define double_df el valor original de *2 a volver, a continuación, los valores numéricos de 'lenguaje' DF1 columna de *la segunda proceso:

def double_df(x):
	return 2*x
df1[u'语文'] = df1[u'语文'].apply(double_df)

Es posible definir funciones más complejas, para la trama de datos, añadir dos, donde la columna 'llamado new1' es m veces la 'lengua' y 'Inglés' suma puntuación, 'a new2' columna 'lengua' y 'Inglés' y Logros n veces

def plus(df,n,m):
	df['new1'] = (df[u'语文']+df[u'英语']) * m
	df['new2'] = (df[u'语文'] + df[u'英语']) * n 
	return df
df1 = df1.apply(plus,axis=1,args=(2,3,))

eje = 1 como un representante de Follow-eje, eje = 0 eje actúa sobre el seguimiento nombre, args se pasa dos parámetros, es decir, n = 2, m = 3, n y m son de uso más función, generando de ese modo nueva df

estadística

describir la función (), podemos tener una comprensión global de los datos

df1 = DataFrame({'name' : ['Zhangfei' , 'Guanyu' , 'a' , 'b' , 'c'] , ' data1':range(5)})
print df1.describe()

contar 5.000000

significa 2.000000

STD 1. ******

me 0.000000

25% 1.000000

50% 2.000000

75% 3.000000

max 4.000000

Combinar Hoja de Datos

Una pluralidad de canales de datos, una pluralidad de tablas de origen se combinan

# 创建两个DataFrame
df1 = DataFrame({'name' :  ['Zhangfei' , 'Guanyu' , 'a' , 'b' , 'c'] , ' data1':range(5)})
df2 = DataFrame({'name' :  ['Zhangfei' , 'Guanyu' , 'A' , 'B' , 'C'] , ' data1':range(5)})
1. Sobre la base de la columna designada están conectados
#   基于name列进行连接
df3 = pd.merge(df1,df2,on = 'name')   //然后返回df1  和 df2 两个表中name列相同元素的部分
Dentro de conexión 2.Inner
# inner内连接是merge合并的默认情况,inner内连接是键的交集,这里df1 & df2 相同的键是name,所以是基于name字段做的连接
df3 = pd.merge(df1,df2,how='inner')
3.left dejó unirse
# 左连接是以第一个 DataFrame为主进行的连接,第二个 DataFrame作为补充
df3 = pd.merge(df1, df2,how='left')   //返回的是先是data1 和name是第一个表的内容,还有data2除了相同的数值其他都是NaN

DEF3:

Nombre datos1 data2

0 Zhangfei 0,0

1 Guanyu 1,0

2 de

3 b NaN

4 C en

4. Conexión derecha derecha
df3 = pd.merge(df1, df2,how='right') 

DEF3:

Nombre datos1 data2

0,0 Zhangfei 0

1,0 Guanyu 1

a 2

NaN B 3

En C 4

La conexión externa exterior
# 相当与求两个DataFrame的并集
df3 = pd.merge(df1,df2,how = 'outer')

df3:

Nombre datos1 data2

0,0 Zhangfei 0,0

1,0 Guanyu 1,0

2,0 de

3.0 b NaN

4,0 C en

En A 2,0

NaN B 3.0

En C 4,0

¿Cómo abrir una forma de SQL pandas

Las sentencias SQL pueden ser utilizados directamente en Python para operar pandas

pandasql: Las funciones principales son sqldf, acepta dos parámetros, una consulta SQL, hay un conjunto de variables de entorno, Globals () o sobre los locales (), se puede utilizar sentencias SQL directamente en la operación pitón trama de datos:

import pandas as pd
from pandas import DataFrame
from pandasql import sqldf , load_meat, load_births
df1 = DataFrame({'name' :  ['Zhangfei' , 'Guanyu' , 'a' , 'b' , 'c'] , ' data1':range(5)})
pysqldf = lambda sql:sqldf(sql , globals())
sql  =  "select * from df1 where name = 'Zhangfei'"
print pysqldf(sql)

lambda se usa para definir una función anónima:

lambda arguement_list:experssion

lista de parámetros arguement_list, el parámetro es un experssion expresión, se devuelve de acuerdo con la experssion evalúa expresión

pysqldf = lambda sql:sqldf(sql , globals())

se introducen los parámetros de SQL, devuelve el resultado de la operación de SQL sqldf, por supuesto, también sqldf parámetro de entrada globales mundial, debido a que el uso de los parámetros globales DF1 en el sql

Trama de datos se ha creado usando datos y limpieza, al tiempo que añade una "suma" se calcula para cada uno de los tres temas de la persona y

nombre completo chino Inglés matemáticas
Zhang Fei 66 sesenta y cinco
Guan Yu 95 85 98
Zhao 95 92 96
Huang 90 88 77
vadear 80 90 90
vadear 80 90 90
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import pandas as pd

data = {'Chinese': [66, 95, 93, 90, 80, 80], 'English': [65, 85, 92, 88, 90, 90],
        'Math': [None, 98, 96, 77, 90, 90]}
df = pd.DataFrame(data, index=['张飞', '关羽', '赵云', '黄忠', '典韦', '典韦'],
                  columns=['English', 'Math', 'Chinese'])
# 去除重复行
df = df.drop_duplicates()
# 列名重新排序
cols = ['Chinese', 'English', 'Math']
df = df.filter(cols, axis=1)
# 列名改为中文
df.rename(columns={'Chinese': '语文', 'English': '英语',
                   'Math': '数学'}, inplace=True)


def total_score(df):
    df['总分'] = df['语文'] + df['英语'] + df['数学']
    return df


# 求成绩的和,用老师讲的 apply 方法
df = df.apply(total_score, axis=1)
# 或者可以用这个方法求和
# df['总分'] = df['语文'] + df['英语'] + df['数学']
# 按照总分排序,从高到低,此时有缺失值
df.sort_values(['总分'], ascending=[False], inplace=True)
# 打印显示成绩单信息,张飞有空值
print(df.isnull().sum())
print(df.describe())
print(df)

# 使用数学成绩均值填充张飞同学的缺失值
df['数学'].fillna(df['数学'].mean(), inplace=True)
# 再次求成绩的和并打印显示成绩单情况
df = df.apply(total_score, axis=1)
print(df.isnull().sum())
print(df.describe())
print(df)
Publicado 75 artículos originales · ganado elogios 9 · vistas 9175

Supongo que te gusta

Origin blog.csdn.net/ywangjiyl/article/details/104719781
Recomendado
Clasificación