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()

Python之pandas进阶(一)_第1张图片
三条曲线在一张图中看起来很乱,分别绘制子图

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

Python之pandas进阶(一)_第2张图片

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

Python之pandas进阶(一)_第3张图片

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

Python之pandas进阶(一)_第4张图片

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()

Python之pandas进阶(一)_第5张图片

2.describe()函数

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

运行结果
Python之pandas进阶(一)_第6张图片

三、时间序列处理

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)

运行结果
Python之pandas进阶(一)_第7张图片

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

运行结果
Python之pandas进阶(一)_第8张图片

四、时间序列重采样

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

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

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

运行结果
Python之pandas进阶(一)_第9张图片
Python之pandas进阶(一)_第10张图片
按月重采样存在许多NAN,因为data2中不包括所以的月份

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

运行结果
Python之pandas进阶(一)_第11张图片
Python之pandas进阶(一)_第12张图片
自学自用,希望可以和大家积极沟通交流,小伙伴们加油鸭,如有错误还请指正,不喜勿喷

你可能感兴趣的:(数据分析,Python,python,数据分析,pandas)