目录
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'))