1)pandas是一个开源的,BSD许可的库,为Python编程语言提供高性能,易于使用的数据结构和数据分析工具。编程
2)numpy可以帮助咱们处理数值,可是pandas除了处理数值以外(基于numpy),还可以帮助咱们处理其余类型的数据数组
1)Series是一种相似于一维数组的 对象,由一组数据(各类NumPy数据类型)以及一组与之对应的索引(数据标签)组成。数据结构
l 相似一维数组的对象dom
l 由数据和索引组成编程语言
² 索引(index)在左,数据(values)在右工具
² 索引是自动建立的性能
2)建立学习
ser_obj = pd.Series(np.arange(10),index=list(string.ascii_uppercase[:10]))优化
3)切片和索引spa
切片:直接传入strat end或步长便可
索引:一个的时候直接传入序号或者index,多个的时候传入序号或者index的列表
4)索引和值
l 获取索引 t.index
l 获取值 t.values
DataFrame是一个表格型的数据结构,它含有一组有序的列,每列能够是不一样类型的值。DataFrame既有行索引也有列索引,它能够被看作是由Series组成的字典(共用同一个索引),数据是以二维结构存放的。
l 相似多维数组/表格数据 (如,excel, R中的data.frame)
l 每列数据能够是不一样的类型
l 索引包括列索引和行索引
代码:
import numpy as np # 经过ndarray构建DataFrame array = np.random.randn(5,4) print(array) df_obj = pd.DataFrame(array) print(df_obj.head())
输出:
0.835005941.492901380.531201060.11313932[[---]
0.646297620.367799410.080110840.60080495[- ]
1.234585220.334096740.587781950.73610573[- --]
1.476514140.994001870.210019950.90515656[- -]
0.566694191.382383480.490990071.94484598[ - ]]
0123
00.8350061.4929010.5312010.113139 ---
10.6462980.3677990.0801110.600805 -
21.2345850.3340970.5877820.736106- --
31.4765140.9940020.2100200.905157- -
40.5666941.3823830.4909901.944846 -
2.经过dict构建dataframe
代码:
# 经过dict构建DataFrame dict_data = {'A': 1, 'B': pd.Timestamp('20170426'), 'C': pd.Series(1, index=list(range(4)),dtype='float32'), 'D': np.array([3] * 4,dtype='int32'), 'E': ["Python","Java","C++","C"], 'F': 'ITCast' } #print dict_data df_obj2 = pd.DataFrame(dict_data) print(df_obj2)
输出:
A B C D E F
01201704261.03 -- Python ITCast
11201704261.03 -- Java ITCast
21201704261.03 -- C++ ITCast
31201704261.03 -- C ITCas
3.经过列索引获取列数据(Series类型)
df_obj[col_idx] 或 df_obj.col_idx
4.增长列数据
df_obj[new_col_idx] = data
5.删除列
del df_obj[col_idx]
df.sort_values(by="Count_AnimalName",ascending=False)
ascending参数默认为true,即升序排列
1)取某一列df[" Count_AnimalName "]
2)取行取列df[:100][" Count_AnimalName "]
1) df.loc 经过标签索引行数据
2) df.iloc 经过位置获取行数据
赋值更改数据:
1) 判断数据是否为NaN:pd.isnull(df),pd.notnull(df)
2) 处理缺失数据
l 方式1:删除NaN所在的行列dropna (axis=0, how='any', inplace=False)
l 方式2:填充数据,t.fillna(t.mean()),t.fiallna(t.median()),t.fillna(0)
3) 处理为0的数据:t[t==0]=np.nan
固然并非每次为0的数据都须要处理
计算平均值等状况,nan是不参与计算的,可是0会
默认状况下他是把行索引相同的数据合并到一块儿
按照指定的列把数据按照必定的方式合并到一块儿
1) 默认的合并方式inner,并集
2) merge outer,交集,NaN补全
3) merge left,左边为准,NaN补全
4) merge right,右边为准,NaN补全
1)groupby方法
grouped = df.groupby(by="columns_name")
grouped是一个DataFrameGroupBy对象,是可迭代的
grouped中的每个元素是一个元组
元组里面是(索引(分组的值),分组以后的DataFrame)
2)DataFrameGroupBy对象有不少通过优化的方法
简单的索引操做:
l 获取index:df.index
l 指定index :df.index = ['x','y']
l 从新设置index : df.reindex(list("abcedf"))
l 指定某一列做为index :df.set_index("Country",drop=False)
l 返回index的惟一值:df.set_index("Country").index.unique()
pd.date_range(start=起始时间, end=“”, periods=生成个数, freq='D')
start和end以及freq配合可以生成start和end范围内以频率freq的一组时间索引
start和periods以及freq配合可以生成从start开始的频率为freq的periods个时间索引
df["timeStamp"] = pd.to_datetime(df["timeStamp"],format="")
format参数大部分状况下能够不用写,可是对于pandas没法格式化的时间字符串,咱们可使用该参数,好比包含中文
重采样:指的是将时间序列从一个频率转化为另外一个频率进行处理的过程,将高频率数据转化为低频率数据为降采样,低频率转化为高频率为升采样
pandas提供了一个resample的方法来帮助咱们实现频率转化
periods=pd.PeriodIndex(year=data["year"],month=data["month"],day=data["day"],hour=data["hour"],freq="H")
以前所学习的DatetimeIndex能够理解为时间戳,那么如今咱们要学习的PeriodIndex能够理解为时间段。
l 将行索引转换为列索引,完成层级索引
l DataFrame->Seriees
示例代码:
import numpy as np import pandas as pd df_obj = pd.DataFrame(np.random.randint(0,10, (5,2)), columns=['data1', 'data2']) print(df_obj) stacked = df_obj.stack() print(stacked)
运行结果:
# print(df_obj) data1 data2 0 7 9 1 7 8 2 8 9 3 4 1 4 1 2 # print(stacked) 0 data1 7 data2 9 1 data1 7 data2 8 2 data1 8 data2 9 3 data1 4 data2 1 4 data1 1 data2 2 dtype: int64
l 将层级索引展开
l Series->DataFrame
l 认操做内层索引,即level=-1
示例代码:
# 默认操做内层索引 print(stacked.unstack()) # 经过level指定操做索引的级别 print(stacked.unstack(level=0))
运行结果:
# print(stacked.unstack()) data1 data2 0 7 9 1 7 8 2 8 9 3 4 1 4 1 2 # print(stacked.unstack(level=0)) 0 1 2 3 4 data1 7 7 8 4 1 data2 9 8 9 1 2
1) duplicated() 返回布尔型Series表示每行是否为重复行
2) drop_duplicates() 过滤重复行
l 默认判断所有列 df_obj.drop_duplicates()
l 可指定按某些列判断 df_obj.drop_duplicates('data2')
replace根据值的内容进行替换
示例代码:
# 单个值替换单个值 print(ser_obj.replace(1, -100)) # 多个值替换一个值 print(ser_obj.replace([6, 8], -100)) # 多个值替换多个值 print(ser_obj.replace([4, 7], [-100, -200]))