# pandas 环境配置
pip install pandas
# 一维数据结构:Series对象
#导包
import pandas as pd
import numpy as np
#Series对象的生成# 从ndarray创建一个Series
a = np.array([1,2,3,4,5])
s1 = pd.Series(a,index=['a','b','c','d','e'],copy=False)
print(s1)
#修改数据
s1['a'] = 100
print(s1)
print(a)
# 从字典创建一个Series
"""
字典 = {k:v}
k:在Series中是index
"""
'''d1 = {'zs':18,'ls':20}
s3 = pd.Series(d1)
print(s3)
print(s3['zs']) #18
# 通过位置访问Series
"""
语法:s1[index] 获取单个数据
"""
#可以使用默认索引,也可以使用自定义索引
d1 = {'zs':20,'ls':30,'ww':40,'ch':20,'zl':30}
s1 = pd.Series(d1)
print(s1['zs']) #使用自定义索引 20
print(s1[0]) #使用默认索引 20
# 通过索引访问Series
"""
语法:
s1[list] 获取索引中的数据
s1[index1:index2] 获取从第一个索引到第二个索引的数据,左开右闭
数字索引是左开右闭,标签索引是左开右开
"""
## 代码
print(s1[[0,3,4]])
print(s1['zs':'ch']) #左开右开
print(s1[['zs','ch','ww']])
#Series对象的使用
"""
axes 返回Series索引列表
dtype 返回Series的数据类型
empty 判断Series是否为空,如果为空,则返回True
ndim 返回基础数据的维度数,默认为1
size 返回基础数据中的元素个数
values 将Series作为ndarray返回
head() 返回前n行
tail() 返回最后n行
head()返回前n行(观察索引值) 默认数量为5,可以传递自定义数值
tail()返回最后n行(观察索引值) 默认数量为5,可以传递自定义数值
"""
## 代码
#可以使用默认索引,也可以使用自定义索引
'''d1 = {'zs':20,'ls':30,'ww':40,'ch':20,'zl':30}
s1 = pd.Series(d1)
print(s1.axes) #[Index(['zs', 'ls', 'ww', 'ch', 'zl'], dtype='object')]
print(s1.dtype) #int64
print(s1.empty) #False
print(s1.ndim) #1
print(s1.size) #5
print(s1.values) #[20 30 40 20 30]
print(type(s1.values)) #<class 'numpy.ndarray'>
print(s1.head(3))
print(s1.tail(2))
#二维数据结构:DataFrame对象
# DataFrame对象的生成
"""
pandas.DataFrame(data,index,columns,dtype,copy)
data 支持多种数据类型,如:ndarray series map lists dict constant 和另一DataFrame
index 行标签,如果没有传递索引值,默认值为0,1,2,3,4......
columns 列标签,如果没有传递索引值,默认值为0,1,2,3,4.......
dtype 每列的数据类型
copy 是否复制数据,默认值为False
"""
## 代码
np01 = np.arange(20).reshape(4,5)
df1 = pd.DataFrame(np01,index=['a','b','c','d'],columns=['name','age','sex','hobbit','address'])
#print(df1)
## 利用单层list (数据变成行数据)
x = [1,2,3,4,5]
df2 = pd.DataFrame(x)
print(df2)
## 利用双层list
x = [
['zs',20],
['ls',30],
['ch',40]
]
df3 = pd.DataFrame(x,columns=['name','age'])
print(df3)
## 利用数据是字典的列表创建
x = [
{'a':20,'b':30},
{'a':100,'b':200,'c':400}
]
df4 = pd.DataFrame(x)
print(df4)
## 利用字典创建DataFrame (a、b是列索引,一定要设置行索引(index),否则报错)
x = {'aa':1,'bb':1.5,'cc':2,'dd':17}
df1 = pd.DataFrame(x,index=['价格'])
print(df1)
x = {
'食品':['aa','bb','cc'],
'价格':[1,2,1.5]
}
df2 = pd.DataFrame(x)
print(df2)
s1 = pd.Series(['aa','bb','cc'])
s2 = pd.Series([1,2,1.5])
x = {
'食品':s1,
'价格':s2
}
df3 = pd.DataFrame(x)
print(df3)
# DataFrame 对象的使用
#DataFrame读取列
"""
语法:
df[columns_label] 查询单列
df[[coiumns_lable]] 查询多列
查询出一列会进行降维DataFrame------> Series
"""
## 代码
s = df3['食品']
print(s)
print(type(s))
s2 = df3[['食品','价格']]
print(s2)
print(type(s2))
#DataFrame添加列
"""
语法:
语法:df[columns] = 数据
切记数据要是同类型的数据,
df1[columns]=df1[columns]+df1[coiumns]
"""
## 代码
a = ['好吃','多','好']
df3['评价'] = a
print(df3)
print("----------------------------")
df3['详细评价']=df3['食品']+df3['评价']
print(df3)
# DataFrame删除列
"""
删除语法
del df[columns] 根据下标进行检索删除,没有返回值
df.pop(columns) 根据下标进行检索删除,并返回删除的那一列
"""
## 代码
del df3['评价']
print(df3)
a = df3.pop('详细评价')
print('a',a) #要删除的那一列数据
print('df3',df3) #删除后的数据
# DataFrame读取行
# 按索引选择
"""
loc[自定义索引(标签索引)]
iloc[默认索引(数字索引)]
语法:
loc[index] 查询一行数据
扩展
loc[index,columns] 精确到行和列,那就是一个数据
查询多行和多列(精确到第几行和第几列)
loc[[index1:index2,....],[columns1:columns12,.....]]
查询多行和多列(第几行到第几行,第几列到第几列)
不是左开右闭
loc[index1:index2,columns1:columns2]
使用布尔索引也可以查询多行多列
loc[行_布尔索引,列_布尔索引]
"""
## 代码
s1 = pd.Series(['馒头','大米','包子','大盘鸡','麻辣烫','鱼粉','热干面'],index=['row1','row2','row3','row4','row5','row6','row7'])
s2 = pd.Series([1,2,1.5,12,16,10,8],index=['row1','row2','row3','row4','row5','row6','row7'])
s3 = pd.Series(['y','y','y','y','y','y','y'],index=['row1','row2','row3','row4','row5','row6','row7'])
x = {
'食品':s1,
'价格':s2,
'评价':s3
}
df3 = pd.DataFrame(x)
print(df3)
print(df3.loc['row1'])
print(df3.loc['row4','食品']) #大盘鸡
print(df3.loc[['row1','row3'],['食品','价格']])
print(df3.loc[['row1','row3'],'食品'])
print(df3.loc['row1',['食品','价格']])
print(df3.loc['row1':'row4','食品':'价格'])
print(df3.loc[['row1','row3'],'食品':'价格'])
index_bool = [True,False,False,False,False,True,True]
col_bool = [True,True,False]
print(df3.loc[index_bool,col_bool])
b = df3['价格'] > 8
print(df3.loc[b]) #行
# 按位置选择
"""
查询行的,iloc[数字索引]
语法:
iloc[num_index] 根据索引位置获取行
iloc[num_index1:num_index2] 第几行到第几行,左开右闭
iloc[[num_index1,num_index2,.....]] 第几行和第几行
iloc[num_index,num_columns] #第几行的第几列
iloc[num_index,[num_columns1,num_columns2,....]] 第几行,第几列和第几列
iloc[num_index,[num_columns1:num_columns2]] 第几行,第几列到第几列,左开右闭
iloc[[num_index1,num_index2,.....],[num_columns1,num_columns2,....]]
iloc[num_index1:num_index2