六、Pandas学习
6.1为什么要学习Pandas?
numpy能够帮助我们处理数值,但是pandas除了处理数值之外(基于numpy),
还能够帮助我们处理其他类型的数据
6.2Pandas的常用数据类型:
6.3Pandas关于Series的操作:
1.创建Series:
2.使用字典创建Series:
3.Series的切片和索引:
4.Serier的索引和值:
6.4Pandas关于DataFrame的操作:
1.创建一个DataFrame:
2.DataFrame的基础属性:
3.DataFrame使用loc方法获取数据:
df.loc 通过标签索引行数据:
4.DataFrame使用iloc方法获取数据:
df.iloc 通过位置获取行数据:
6.5Pandas中的布尔索引:
当只有一个过滤条件时,可以这样写:
当有两个或两个以上过滤条件时,可以这样写:&表示且,|表示或
6.6Pandas中的字符串方法:
6.7Pandas中缺失数据(NaN)的处理:
判断数据是否为NaN:pd.isnull(df),pd.notnull(df)
处理方式1:删除NaN所在的行列dropna (axis=0, how='any', inplace=False)
处理方式2:填充数据,t.fillna(t.mean()),t.fillna(t.median()),t.fillna(0)
处理为0的数据:t[t==0]=np.nan
当然并不是每次为0的数据都需要处理
计算平均值等情况,nan是不参与计算的,但是0会
6.8Pandas中常用的统计方法:
示例:统计电影的分类情况
思路:重新构造一个全为0的数组,列名为分类,如果某一条数据中分类出现过,就让0变为1
实现:
6.9Pandas中的数据合并:
1.join:把行索引相同的数据合并到一起
2.merge:按照指定的列把数据按照一定的方式合并到一起
6.10Pandas中的数据分组和聚合
1.数据分组:
使用:grouped = df.groupby(by="columns_name")
解析:grouped是一个DataFrameGroupBy对象,是可迭代的
grouped中的每一个元素是一个元组,
元组里面是(索引(分组的值),分组之后的DataFrame)
2.数据聚合:
使用:分组之后的DataFrameGroupBy对象包含以下方法:
3.数据分组扩展:
使用:grouped = df.groupby(by=[df["Country"],df["State/Province"]])
读取部分数据:
返回Series数据:df.groupby(by=["Country","State/Province"])["Country"].count()
返回DataFrame数据:df.groupby(by=["Country","State/Province"])[["Country"]].count()
对部分数据继续进行分组:
返回Series数据:df["Country"].groupby(by=[df["Country"],df["State/Province"]]).count()
返回DataFrame数据:df[["Country"]].groupby(by=[df["Country"],df["State/Province"]]).count()
4.索引和复合索引:
a.简单的索引操作:
获取index:df.index
指定index :df.index = ['x','y']
重新设置index : df.reindex(list("abcedf"))
指定某一列作为index :df.set_index("Country",drop=False)
返回index的唯一值:df.set_index("Country").index.unique()
b.复合索引的使用示例:
c.复合索引的使用扩展示例:
Series取值:
DataFrame取值:
6.11Pandas中的时间序列:
1.为什么要学习时间序列:
不管在什么行业,时间序列都是一种非常重要的数据形式,
很多统计数据以及数据的规律也都和时间序列有着非常重要的联系
而且在pandas中处理时间序列是非常简单的
2.pandas中的时间序列的基础使用:
pd.date_range(start=None, end=None, periods=None, freq='D')
解析:start和end以及freq配合能够生成start和end范围内以频率freq的一组时间索引
start和periods以及freq配合能够生成从start开始的频率为freq的periods个时间索引
示例:
关于频率(freq)的缩写:
在DataFrame中使用时间序列:
基础使用:
index=pd.date_range("20170101",periods=10)
df = pd.DataFrame(np.random.rand(10),index=index)
进阶使用:
使用pandas提供的方法把时间字符串转化为时间序列:
df["timeStamp"] = pd.to_datetime(df["timeStamp"],format="")
解析:format参数大部分情况下可以不用写,但是对于pandas无法格式化的时间字符串,
我们可以使用该参数,比如包含中文
6.12Pandas中的重采样:
概念:重采样指的是将时间序列从一个频率转化为另一个频率进行处理的过程,
将高频率数据转化为低频率数据为降采样,低频率转化为高频率为升采样
pandas提供了一个resample的方法来帮助我们实现频率转化
使用示例:
6.13Pandas读取外部数据(csv):pandas.read_csv(file_path)