1.创建 Series (一维,带标签的数组)
t = pd.Series(np.arange(10), index= list(string.ascii_uppercase[:10]))
2.创建 DataFrame (二维,Series的容器 )
t = pd.DataFrame(np.arange(6).reshape((2,3)), index=list('ab'),columns=list('csr') )
3.DataFrame的基础属性
#行列数
print(tt2.shape)
#列数据类型
print(tt2.dtypes)
#数据维度
print(tt2.ndim)
#行索引
print(tt2.index)
#列索引
print(tt2.columns)
#对象值(二维数组)
print(tt2.values)
4.DataFrame整体情况的查询
#显示头部的几行默认五行
print(tt2.head(2))
#显示末尾几行 默认五
print(tt2.tail())
显示相关的信息
print(tt2.info())
快速的纵隔统计记过: (计数,均值,标准差,最大值,四分位数, 最小值)
print(tt2.describe())
5.DataFrame 对数据排序 (升序或者降序)
a) 升序 d1 = dogname.sort_values(by="Count_AnimalName")
b) 降序 d2 = dogname.sort_values(by="Count_AnimalName", ascending=False)
6.取行取列操作
数字取行, 字符串取列 d2[:20]['Row_Labels']
df.loc方法:(通过标签索引行数据)
print(csv.loc[['a','b'],['w','r']])
遍历的形式,包括后面的r列
print(csv.loc[['a','b'],'w':'r'])
df.iloc方法 (通过位置获取行数据)
print(csv.iloc[[0,2],[2]])
遍历的形式,不包括后面的3行
print(csv.iloc[0:3,[2,3]])
7.pandas布尔值类型条件
多个条件可以 通过 & 链接
dogname[(dogname['Count_AnimalName']>50) & (dogname['Row_Labels'].str.len()>4)]
8.对nan的一些操作
a) 判断是否为 nan : pd.isnull(t) 或者 pd.notnull(t)
b) 删除nan所在行列: t.dropna(axis=0, how='any', inplace=False) how:any/all(全为nan删除) inplace是否直接替换
c) 填充nan: t.fillna(t.mean())
d) 将0改为nan:t[t==0] = np.nan
9.对于过长的DataFrame与numpy使用print打印时,全部显示(不会出现省略号)
a) 对于DataFrame:
1)显示所有的列: pd.set_option('display.max_columns', None)
2) 显示所有的行: pd.set_option('display.max_rows', None)
b)对于numpy:
numpy.set_printoptions(threshold = np.inf)
#若想不以科学计数显示: numpy.set_printoptions(suppress = True)
10.数组合并之join / merge
a) join:默认情况下把行索引相同的数据合并到一起:
df1.join(df2) 注意:根据前面的行列进行合并,假如两个df制定了列,则不可有重复列名
b) merge:根据列索引进行合并
1)默认为内连接(交集): df1.merge(df2, on='c') (假如都合适,22会出现四行数据)
2)merge outer外连接(并集):df1.merge(df2, on='c', how='outer')把除了交际以外的数据,显示c有的那一个df的数据,没有的补充nan
3)merge left 左连接(根据左边的df)
4)merge right右连接(根据右边的df
11.分组与聚合
1) grouped = df.groupby(by='列索引') #根据此列数据进行分组
2) grouped 是一个DataFrameGroupBy对象,是可迭代的
3) grouped中的每一个元素是一个元组
4) 元组里面是 (索引(分组的值),分组后的DataFrame)
12.DataFrameGroupBy 对象有很多经过优化的方法
13.简单的索引操作
1) 获取index: df.index
2) 指定index: df.index = ['x', 'y']
3) 重新设置index: df.reindex(list("abc")) #这个操作类似查询,在df中取出有"abc"列的数据,没有的nan填充
4) 指定索引(index)为 某一列: df.set_index("列名",drop=Fasle) #drop指定Fasle,指定列成为索引,此列也为数据
5) 返回index的唯一值(去重): df.set_index('列名').index.unique()
14.从复合索引中取值
Series)
1) s1['a']['b']
2) s1['a', 'b']
DataFrame)
df.loc['a'].loc['b']
15.从内层索引开始取值
df.swaplevel()
16.pandas中的时间序列
1)生成时间范围
开始结束时间) pd.date_range(start="2001-01-01", end="2002-01-01", freq="10D")
开始时间和生成个数)pd.date_range(start="2001-01-01", periods = 10, freq= "WOM-3FRI")
2)时间字符串转换成 时间序列
df["timeStamp"] = pd.to_datetime(df["timeStamp"], format="")
format对panda无法格式化的时间字符串进行处理,详情搜索
17.pandas重采样重采样:
指的是将时间序列从一个频率转换成另一个频率进行处理的过程。将高频率转换成低频率数据为降采样,低频率转换成高频率为升采样pandas提供一个 resample 的方法来帮助我们实现频率转化例如 以月份进行统计t.resample("M").mean()
18.PeriodIndex
DatetimeIndex 可以理解为时间戳
那么 PeriodIndex可以理解为时间段
例子: periods = pd.PeriodIndex( year=data["year"], month=data["month"],day=data["day"],hour=data["hour"], freq="H" )
如何给这个时间段降采样?
data = df.set_index(periods).resample("10D").mean()
19.时间类型转 字符串类型
time.strftime('%y%m%d')