前言
pandas是用于数据分析的开源python库,可以实现数据加载,清洗,转换,统计处理,可视化等功能。而DataFrame和Series是pandas最基本的两种数据结构。DataFrame用来处理结构化数据,Series用来处理单列数据,也可以把DataFrame看作Series对象组成的字典或集合。
一、创建series对象
import pandas as pd
import numpy as np
# 创建numpy.ndarray对象
# n1 = np.array([1, 2, 3])
# print(n1)
# print(type(n1))
# # 创建Series对象
# s1 = pd.Series(data=n1)
# print(s1)
# print(type(s1))
# 直接创建
s2 = pd.Series(['banana', 42])
print(s2)
print(type(s2))
# 不用ndarray方式,直接传入列表,元组,字典
s2=pd.Series([1,2,3],index=['a','b','c'])
print(s2)
print(type(s2))
print('------------')
s3=pd.Series((4,5,6),index=['a','b','c'])
print(s3)
print(type(s3))
print('------------')
s4=pd.Series({'a':7, 'b':8, 'c':9})
print(s4)
print(type(s4))
二、创建DataFrame对象
1.指定行索引和列的位置
# 指定行索引,和 列的位置
import pandas as pd
df=pd.DataFrame({'id':[1,2,3],'name':['zhangsan','lisi','wangwu'],'age':[12,13,12]},index=['A','B','C'],columns=['age','id','name'])
print(df)
2.列表嵌套元组
# 传入列表嵌套元组
df1=pd.DataFrame(data=[(1,'zhangsan','23'),(2,'lisi','23'),(3,'wangwu','23')],index=['A','B','C'],columns=['id','name','age'])
print(df1)
三、Series属性-索引-运算
一、series属性和方法
import pandas as pd
# 设置id列为索引列
data=pd.read_csv('./nobel_prizes.csv',index_col='id')
data.head()
first_row=data.loc[941] # 按照行索引获取行数据
print(first_row)
two_row=data.iloc[1] # 按照行号获取行数据
print(two_row)
- append 连接两个或多个Series
- corr 计算与另一个Series的相关系数
- cov 计算与另一个Series的协方差
- describe 计算常见统计量
- drop_duplicates 返回去重后的Series
- equals 判断两个Series 是否相同
- get_values 获取Series的值,作用与values属性相同
- hist 绘制直方图
- isan Series中是否包含某些值
- min 返回最小值
- max 返回最大值
- median 返回中位数
- mean 返回平均值
- mode 返回众数
- quantile 返回指定位置的分位数
- replace 用指定值代替Series中的值
- sample 返回Series 的随机采样值
- sort_values 对值进行排序
- to_frame 把Series 转换为DataFrame
- unique 去重返回数组
- values_counts 统计不同值数量
- keys 获取索引值
- head 查看前5个值
- tail 查看后5个值
-
import pandas as pd # 创建s对象 s1 = pd.Series(data=[1, 2, 3, 4, 2, 3], index=['A', 'B', 'C', 'D', 'E', 'F']) # 查看s对象值数量 print(len(s1)) # 查看s对象前5个值, n默认等于5 print(s1.head()) print(s1.head(n=2)) # 查看s对象后5个值, n默认等于5 print(s1.tail()) print(s1.tail(n=2)) # 获取s对象的索引 print(s1.keys()) # s对象转换成python列表 print(s1.tolist()) print(s1.to_list()) # s对象转换成df对象 print(s1.to_frame()) # s对象中数据的基础统计信息 print(s1.describe()) # s对象最大值、最小值、平均值、求和值... print(s1.max()) print(s1.min()) print(s1.mean()) print(s1.sum()) # s对象数据值去重, 返回s对象 print(s1.drop_duplicates()) # s对象数据值去重, 返回数组 print(s1.unique()) # s对象数据值排序, 默认升序 print(s1.sort_values(ascending=True)) # s对象索引值排序, 默认升序 print(s1.sort_index(ascending=False)) # s对象不同值的数量, 类似于分组计数操作 print(s1.value_counts())
布尔索引
import pandas as pd
data=pd.read_csv('./scientists.csv')
data
# 统计所有大于平均年龄的数据
# 1. 获取所有的年龄.
ages = data.Age
# 2. 获取所有年龄的 平均值
age_mean = ages.mean()
age_mean
# 3. 查询所有 大于平均年龄的数据.
ages[ages > age_mean] # [False, True, True, True, False, False, False, True]
# 上述需求, 一行既能搞定, 写法如下
# df['Age'][df['Age'] > df['Age'].mean()]
data.Age[data.Age > data.Age.mean()]
二、运算
ages = df['Age']
print(ages + 10)
print(ages * 2)
print(ages + ages)
print('=' * 20)
print(pd.Series([1, 100]))
print('=' * 20)
print(ages + pd.Series([1, 100]))
四、DataFrame属性-索引(更改)
一、DataFrame属性
import pandas as pd
df=pd.read_csv('./movie.csv')
df
print(df.shape) #维度
print(df.size) #长度
print(df.ndim) #数组轴,二维表
print(df.index)
print(df.values)
print(df.dtypes)
# print(df.info) #查看内容信息
df.describe() # 查看完整信息 #默认只展示数值型特征列
# df.describe(exclude=['int']) #过滤掉,不展示
# df.describe(exclude=['int','float']) # “过滤掉”,不展示
df.describe(include='all') # “过滤出”,展示所有列
# len(df) #统计行数
# df.count() #统计每列非空值行数
df.duration.max()
# df.num_voted_users.min()
# df.max() #统计每列最大值
# df.min() #统计每列最小值
# df.mean() #统计每列平均值,只针对于数字列有效
df.director_facebook_likes.max()
二、DataFrame索引相关
# 2. df对象, 也支持 布尔索引, 入门案例如下.
df.head()[[False, True,