一、创建
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(http://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')