我们可以像前面那样从csv构建dataframe,也可以从dict中创建dataframe。
# 从字典中构建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)
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()
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'))