【python学习笔记】41:认识Pandas中的数据变形

版权声明:本文为博主原创学习笔记,如需转载请注明来源。 https://blog.csdn.net/SHU15121856/article/details/84061327

学习《Python3爬虫、数据清洗与可视化实战》时自己的一些实践。


Pandas数据变形

关于stack()unstack()这里这里

import pandas as pd
import numpy as np

# 读取杭州天气文件
df = pd.read_csv("E:/Data/practice/hz_weather.csv", delimiter=',', encoding='utf-8', header=0)

# (1)DataFrame转Series(层次化索引)
s = df.stack()
# print(type(s))  # <class 'pandas.core.series.Series'>

# (2)Series转回DataFrame
df = s.unstack()

# (3)数据透视表:以日期为索引
df1 = df.set_index('日期')
print(df1.head())

这个就相当于看每一天的各项指标了,通过reset_index()可以还原索引。
在这里插入图片描述

# (4)数据透视表:以[天气]为索引,查看不同[风向]下的[最高气温]的[最大值]
df2 = pd.pivot_table(df, index=['天气'], columns=['风向'], values=['最高气温'], aggfunc=np.max)
print(df2)

在某个天气和某种风向下很可能有多个数据,所以aggfunc参数就是用来聚合这些数据的,这里用最大值函数取最大。
在这里插入图片描述

旅游数据的分析与变形

import pandas as pd
import numpy as np

# 读取去哪网自由行产品数据
df = pd.read_csv("E:/Data/practice/qunar_free_trip.csv", delimiter=',', encoding='utf-8', header=0)
# print(df.head())

在这里插入图片描述

# 按'出发地'和'目的地'分组,查看'价格'的均值
# 默认情况下,groupby使用as_index=True,这时将用于分组的列作为(行)索引,生成Series对象
s1 = df['价格'].groupby([df['出发地'], df['目的地']]).mean()
# print(s1)

在这里插入图片描述

# 读取路线页数
df_ = pd.read_csv("E:/Data/practice/qunar_route_cnt.csv", delimiter=',', encoding='utf-8', header=0)
# print(df_.head())

在这里插入图片描述

# 按'出发地'和'目的地'分组,查看所有指标(如果可求均值)的均值
# 这里指明as_index=False,则不把用于分组的列作为(行)索引
# 相当于仅仅进行了排序,让这些分组相近的排在一起,最终得到的仍然是DataFrame对象
df1 = df.groupby([df['出发地'], df['目的地']], as_index=False).mean()
# print(type(df1))  # <class 'pandas.core.frame.DataFrame'>
# print(df1.head())

在这里插入图片描述

# 将均值表和路线表合并,不指定on参数也不指定how参数,则默认寻找相同的列做INNER JOIN
df_ij = pd.merge(df1, df_)
# print(df_ij.head(7))  # 前7行

在这里插入图片描述

# 数据透视表:以[出发地]为索引,查看不同[目的地]下的[价格]的[平均值]
df2 = pd.pivot_table(df, index=['出发地'], columns=['目的地'], values=['价格'], aggfunc=np.average)
# print(df2.head(8))

在这里插入图片描述

# 数据透视表:在[出发地为杭州的数据中],以[出发地,目的地]为索引(实际上出发地也就只有杭州了)
# 查看不同[去程方式]下[价格]的[平均值]
df3 = pd.pivot_table(df[df['出发地'] == '杭州'], index=['出发地', '目的地'], columns=['去程方式'], values=['价格'], aggfunc=np.mean)
# print(df3)

在这里插入图片描述

扫描二维码关注公众号,回复: 4132010 查看本文章

猜你喜欢

转载自blog.csdn.net/SHU15121856/article/details/84061327