本文目录
  1. 2. Pandas
  2. 2.1 Series
  3. 2.2 Dataframe

Pandas 数据处理与清洗

使用 Series 与 DataFrame 完成筛选、聚合、转换和数据清洗。

2. Pandas

2.1 Series

## series创建对象--一维列添加行索引
# 列表创建数据
s1=pd.Series([1,2,3,4,5])

# 字典创建数据
s2=pd.Series({'a':1,'b':2,'c':3,'d':4,'e':5})

# 列表及索引创建数据
s3=pd.Series([1,2,3,4,5],index=['a','b','c','d','e'])
print(f"列表直接创建,索引为默认索引:\n{s1}")
print(f"字典创建,索引为字典的键:\n{s3}")
print(f"列表及索引创建,索引为自定义索引:\n{s3}")

# series获取值
print(f"获取值:{s3.values}")
print(f"获取键:{s3.index}")

2.2 Dataframe

2.2.1创建数据

# 列表创建数据
d1=pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]])
d2=pd.DataFrame([1,2,3])
print(f"列表创建二维:\n{d1}")
print(f"列表创建一维:\n{d2}")
#通过字典创建数据
d3=pd.DataFrame({'姓名':['张三','李四','王五'],'年龄':[4,5,6],'性别':['男','男','男']})
print(f"字典创建:\n{d3}")
#自定义列和索引
d4=pd.DataFrame([['张三','男',18],['李四','女',19],['王五','男',20]],
                columns=['姓名','性别','年龄'],
                index=['冠军','亚军','季军'])
print(f"自定义列和索引:\n{d4}")

2.2.2 属性查看

# dataframe属性查看
print(f"DataFrame对象的形状:{d4.shape}")
print(f"DataFrame对象的列索引:{d4.columns}")
print(f"DataFrame对象的行索引:{d4.index}")
print(f"DataFrame对象的数据类型:{d4.dtypes}")

2.2.3数据查看

# dataframe数据查看
print(f"展示头两个:\n{d4.head(2)}")
print(f"展示最后两个:\n{d4.tail(2)}")
# 数据的简单统计-只能分析数值
print(f"数据的简单统计:\n{d4.describe()}")
# 通过列获取数据
print(f"通过列获取数据:\n{d4[['姓名','性别']]}")
# 通过行获取数据location
# 通过自定义名称获取
print(f"通过自定义行获取数据:\n{d4.loc['冠军']}")
# 通过索引获取
print(f"通过索引获取数据:\n{d4.iloc[[0,1]]}")

# 切片:numpy也可以用
print(f"切片:\n{d4.iloc[0:2]}")

2.2.4数据筛选和排序

## dataframe数据筛选和过滤
# 筛选
print(d4.query('年龄>18'))
print(d4.query('性别=="男"and 年龄>18'))
# 排序
print(d4.sort_values(by='年龄',ascending=False))
print(d4.sort_values(['性别','年龄'],ascending=[True,False]))

2.2.5数据转换

## dataframe数据转换
# 分组聚合
# 读取csv文件
df=pd.read_csv('分组聚合.csv')
print(df)
# 单个分组
print(df.groupby('产品').sum())
# 多个分组
print(df.groupby(['产品','地区']).agg(['sum','max','min']))
# 查看某一个属性的数据
print(df.groupby(['产品','地区'])['销售额'].agg(['sum','max','min']))
# 透视表
print(pd.pivot_table(df,index=['产品'],columns=['地区'],values=['销售额'],aggfunc='sum'))

2.2.6数据清洗

## 数据清洗
#读文件
df1=pd.read_csv('数据清洗.csv')
#看文件
print(df1)
#检测缺省数量
print(df1.isnull().sum())
print(df1.notnull().sum())
#删除有空缺的行
# df2=df1.dropna() #删除有缺的行,并返回到一个新df
# print(df2)
# df1.dropna(inplace=True)#删除有缺的行,直接替换
# print(df1)

#删除有空缺的列
# df1.dropna(axis=1,inplace=True)#删除有缺的列,直接替换
# print(df1)
# df2 = df1.dropna(axis=1)
# print(df2)

#填充缺省值
df2=df1.fillna(0)
print(df2)