Pandas
(numpy能够帮助我们处理数值,但是pandas除了处理数值外还能够处理其他类型的数据)
常用数据类型一:Series(带标签数组)
- Series创建:
# 传入大写字母创建一个Series数据
# 列表创建Series
t = pd.Series(np.arange(10), index=list(string.ascii_uppercase[:10]))
# 字典创建Series
a = {string.ascii_uppercase[i]:i for i in range(10)}
t = pd.Series(a)
# 注意索引index 和 values
2.Series切片和索引:
# 以2为步长,起始位置为2,终止位置为10
t = t[2:10:2]
# 取2, 3, 6行
t = t[[2, 3, 6]]
# 布尔索引取行
t = t[t>4]
# 取index对应值
t = t["F"]
# 取index值行
t = t[["A", "F", "G"]]
3.外部数据读取
# 读取的是DateFrame类型
pd = pd.read_csv(filename)
print(pd.index)
print(pd.values)
常用数据类型二:DataFrame
1:DataFrame创建
# DataFrame对象既有行索引又有列索引
# 行索引:表明不同行,横向索引,index,0轴,axis=0
# 列索引:表明不同列,纵向索引,columns,1轴,axis=1
t = pd.DataFrame(np.arange(12).reshape((3,4)))
t = pd.DataFrame(np.arange(12).reshape((3,4)),
index=list(string.ascii_upperpase[:3]),
columns=list(string.ascii_upperpase[-4:]))
2: DataFrame属性查询
- t.shape :行列
- t.dtypes :列数据类型
- t.ndim :数据维度
- t.index : 行索引
- t.columns : 列索引
- t.values :对象值,二维ndarray数组
- 整体情况查询:t.head(3)/t.tail(3)
- t.info() : 相关信息概览:行数、列数、列索引、列非空值个数、行类型、列类型、内存占用
- t.describe() : 快速综合统计结果:计数、均值、标准差、最大值、四分位数、最小值
3:DataFrame常用方法
-
t.sort_values(by=“count_AnimalName”,ascending=False)
出现次数最高的几个名字/排序操作 -
取行列操作:t[:100][“count_AnimalName”]
-
loc通过标签索引数据/iloc通过位置索引数据
# Aindex行 Wcolums列的值
t.loc["A", "W"]
# 取得后的类型为Series类型
t.loc["A", ["W", "Z"]]
t.loc[["A", "C"], ["W", "Z"]]
t.loc["A":, ["W", "Z"]]
t.loc["A":"C", ["W", "Z"]]
t.iloc[1:3, [2,3]]
t.iloc[1:3, 1:3]
# 更改数据后面=值 同理
- 布尔索引
t[t["count_AnimalName"]>800]
t[(t["Row_labels"].str.len()>4) & t["count_AnimalName"]>700]
-
缺失数据处理
处理方式一:删除Nan所在的行列
dropna(axis=0, how=‘any’, inplace=False)
处理方式二:填充数据:
t.fillna(t.mean())
t.fillna(t.median())
t.fillna(0) -
数据合并join:默认将行索引相同的数据合并到一起
t1.join(t2) -
分组和聚合
df.groupby(by=“columns_name”) -
Pandas时间序列
pd.date_range(start=None, end=None, freq=‘D’)
生成start和end范围内以频率freq的一组时间索引
pd.date_range(start=None, periods=10, freq=‘D’)
生成start开始的频率为freq的periods个时间索引
ps:数据分析这部分是根据黑马视频写的,也不知道有没有侵权…大家一起学习,有需要资源的朋友可以留言
剩下的再发现的问题,随时补充吧