目录

DataFrame

Series结构

Dataframe组成

Dataframe索引操作

DataFrame的存储和读取操作(关联数据库)

DataFrame高级操作

替换操作

 清洗操作

合并操作


DataFrame

一种二维表格的数据结构,可以用于存储数值型数据和文本数据,且可以对存储的数据进行高性能的运算和处理,且可以和数据库进行关联。

Series结构

是一种一维的存储数据的结构,单行或单列结构,是组成DataFrame的基本结构,二维的DataFrame中的单行和单列其实就是Series.

series组成(两部分)

        values:一组数据,index:相关的数据索引标签

隐式索引:默认索引,数值型,显示索引:自定义,字符串

创建方式:

import numpy as np
import pandas as pd
#默认索引
s1 = pd.Series(data=[1,'two',3])
print(s1)

#显示索引
dic = {
    '英语':100,
    '数学':120,
    '理综':300
}
s2 = pd.Series(data=dic)

#自定义显示索引
s3 = pd.Series(data=[1,2,3],index=['a','b','c'])
print(s3)

Dataframe组成

创建方式:

添加表结构:多级列表方式写入

import numpy as np
import pandas as pd
from pandas import DataFrame,Series

#创建df:使用的默认的索引
df1 = DataFrame(data=[[1,2,3],[4,5,6]])
#通过numpy随机生成的数据填充df
df2 = DataFrame(data=np.random.randint(0,100,size=(5,6)))

#自定义索引
df3 = DataFrame(data=[[1,2,3],[4,5,6]],index=['a','b'],columns=['A','B','C'])
print(df3)

# #删除指定列

# df.drop(labels='Unnamed: 0',axis=1,inplace=True)

索引取值函数

iloc():放隐式索引
loc():放显示索引   

行索引:index,列索引:columns,值:values 

Dataframe索引操作

#1.取出单列df[列索引]
#2.取多列df[[col1,col2]]
#3.取单行:df.iloc[index]
#4.取多行:df.iloc[[index1,index2]]
#5.取单个元素df.iloc[index,col]
#6.取多个元素df.iloc[[index1,index2],col]
# print(df2.iloc[1,[1,3]])

切片操作

iloc[ :,: ]  #前面的冒号就是取行数,后面的冒号是取列数

#1.切出前两行df[index1:index3]
#2.切列:df.iloc[:,col1:col3]
print(df2.iloc[:,2:4]) # 取2列到4列的值

DataFrame的存储和读取操作(关联数据库)

#将数据写入磁盘
# df.to_csv('./123456.txt')    #csv文本文件的模块,这里做变量附加

#从磁盘中读取数据
# df = pd.read_csv('./123456.txt')
#将mysql的库表读取出来
conn = pymysql.connect(host='127.0.0.1',port=3306,user='root',password='',db='python32')

df = pd.read_sql('select * from teacher',conn)

DataFrame高级操作

替换操作

#指定数据进行全局替换
df.replace(to_replace=4,value='four',inplace=True)
#替换指定列中的数据
df.replace(to_replace={2:3},value='three',inplace=True) #to_replace={列:值}
#替换多个值
df.replace(to_replace={2:'two',1:'one'},inplace=True) 
## {2:'two',1:'one'} 2替换为two,1替换为one。

 清洗操作

import numpy as np
  import pandas as pd
   from pandas import DataFrame  df = DataFrame(data=np.random.randint(0,5,size=(6,4)))
   df.iloc[1,2] = None
   df.iloc[2,2] = None
   df.iloc[4,3] = None
  
   #将=0的行数据进行删除 dropna()
   # d_df = df.dropna(axis=0)
   
#使用指定数据填充所有的空值 fillna()
   # d_df = df.fillna(value=666)
 #近邻值填充:method=bfill 或者 ffill
   # d_df = df.fillna(method='bfill',axis=0)
   
   #知道哪些列中存在空值:True==1 False==0
   # print(df.isnull().sum(axis=0))
   
  #使用均值填充空值 mean()求均值
   for i in range(4):
       if df[i].isnull().sum(axis=0) > 0:
         mean_value = df[i].mean()
           df[i].fillna(value=mean_value,inplace=True)
 print(df)

合并操作

#一对一
import numpy as np
 import pandas as pd
 from pandas import DataFramedf1 = DataFrame(data=np.random.random(size=(5,3)),columns=['A','B','C'])
 df2 = DataFrame(data=np.random.random(size=(5,3)),columns=['A','D','C'])#匹配级联:(拼接的两张表行列索引都一样),结果取第一表的索引
 # result = pd.concat((df1,df1),axis=1)
#不匹配级联 :结果取公共索引
 result = pd.concat((df1,df2),axis=0,join='inner')
 print(result)


自定义索引

#一对多 
df3 = DataFrame({
     'employee':['Lisa','Jake'],
     'group':['Accounting','Engineering'],
     'hire_date':[2004,2016]})
  df4 = DataFrame({'group':['Accounting','Engineering','Engineering'],
                        'supervisor':['Carly','Guido','Steve']
                 })
 pd.merge(left=df3,right=df4,on='group') ##合并操作print()
#多对多
df1 = DataFrame({'employee':['Bob','Jake','Lisa'],
                  'group':['Accounting','Engineering','Engineering']})
 df5 = DataFrame({'group110':['Engineering','Engineering','HR'],
                 'supervisor':['Carly','Guido','Steve']
                 })
 print(pd.merge(left=df1,right=df5,left_on='group',right_on='group110',how='right'))