Python之pandas进阶(一)

Python之pandas进阶(一)

一、构建dataframe

我们可以像前面那样从csv构建dataframe,也可以从dict中创建dataframe。

  • 使用zip()函数
  • 添加新列
  • 广播(Broadcasting): 创建新列并为整个列赋值
# 从字典中构建dataframe
country=['Spain','France']
population=['11','12']
list_label=['country','population']
list_col=[country,population]
print(list_col)

运行结果
在这里插入图片描述

# zip()函数
zipped=list(zip(list_label,list_col))#转为list
data_dict=dict(zipped)#转为dict
df=pd.DataFrame(data_dict)#转为dataframe
print(df)

运行结果
在这里插入图片描述

#添加新列
df['capital']=['madrid','paris']
print(df)

运行结果
在这里插入图片描述

#广播
df['income']=0#广播整列
print(df)

在这里插入图片描述

二、可视化EDA

1.绘图

import pandas as pd
import matplotlib.pyplot as plt
data=pd.read_csv('..\data\pokemon\Pokemon.csv')
# print(data)
data1=data.loc[:,['Attack','Defense','Speed']]
# print(data1)
data1.plot()
plt.show()

在这里插入图片描述
三条曲线在一张图中看起来很乱,分别绘制子图

data1.plot(subplots=True)
plt.show()

在这里插入图片描述

# 绘制散点图
data1.plot(kind='scatter',x='Attack',y='Defense')
plt.show()

在这里插入图片描述

# 绘制直方图
data1.plot(kind='hist',y='Defense',bins=30,range=(0,250))
plt.show()

在这里插入图片描述

fig,axes=plt.subplots(nrows=2,ncols=1)
# 统计直方图
data1.plot(kind='hist',y='Defense',bins=50,range=(0,250),ax=axes[0])
#累计直方图
data1.plot(kind='hist',y='Defense',bins=50,range=(0,250),ax=axes[1],cumulative=True)
plt.show()

在这里插入图片描述

2.describe()函数

  • count: 计算每个条目出现的次数
  • mean: 平均值
  • std: 标准差
  • min: 最小值
  • 25%: 第一四分位数
  • 50%: 中位数
  • 75%: 第三四分位数
  • max: 最大值
print(data1.describe())

运行结果
在这里插入图片描述

三、时间序列处理

import pandas as pd
time_list=['1992-03-08','1992-04-12']
print(type(time_list[1]))#此时日期是str类型
#我们希望能把它变为datatime类型
datatime_object=pd.to_datetime(time_list)
print(type(datatime_object))#datatime 类型

运行结果
在这里插入图片描述

import warnings
import pandas as pd
data=pd.read_csv('..\data\pokemon\Pokemon.csv')
# 调用filterwarning()关闭警告
warnings.filterwarnings('ignore')
data2=data.head()
date_list=['1992-01-10','1992-02-10','1992-03-10','1993-03-15','1993-03-16']
# 转换为datatime类型
datetime_object=pd.to_datetime(date_list)
data2['date']=datetime_object
# 设置日期作为索引
data2=data2.set_index('date')
print(data2)

运行结果
在这里插入图片描述

# 根据日期索引筛选数据
print(data2.loc['1993-03-16'])
print(data2.loc['1992-03-10':'1993-03-16'])

运行结果
在这里插入图片描述

四、时间序列重采样

Pandas提供了便捷的方式对时间序列进行重采样(resampling),根据时间粒度的变大或者变小分为降采样和升采样:

降采样(Downsampling): 时间粒度变大。例如,原来是按天统计的数据,现在变成按周统计。
升采样(Upsampling): 时间粒度变小。例如,原来是按周统计的数据,现在变成按天统计。
插值(Interpolate): 根据“linear”、“time”或“index”等不同方法插值。

# 按年重采样
print('###按年重采样')
print(data2.resample('Y').mean())
# 按月重采样
print('###按月重采样')
print(data2.resample('M').mean())

运行结果
在这里插入图片描述
在这里插入图片描述
按月重采样存在许多NAN,因为data2中不包括所以的月份

#真实数据场景中,可以使用interpolate()从初值开始插值
print(data2.resample('M').first().interpolate('linear'))
#可以使用mean()进行插值
print(data2.resample('M').mean().interpolate('linear'))

运行结果
在这里插入图片描述
在这里插入图片描述
自学自用,希望可以和大家积极沟通交流,小伙伴们加油鸭,如有错误还请指正,不喜勿喷

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柚子味的羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值