一、pandas是一个强大的Python数据分析的工具包。
二、pandas是基于NumPy构建的。正则表达式
三、pandas的主要功能数据库
四、安装方法:pip install pandas
五、引用方法:import pandas as pdjson
series是一种一维数据结构,每个元素都带有一个索引,与一维数组的含义类似,其中索引能够为数字或字符串。数组
import pandas as pd import numpy as np pd.Series([1, 2, 3, 4]) pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd']) pd.Series({'a': 1, 'b': 2}) pd.Series(np.arange(5))
In [8]: sr = pd.Series([1, 2, 3, 4]) In [9]: sr*2 Out[9]: 0 2 1 4 2 6 3 8 dtype: int64 In [10]: sr[sr>1] #布尔运算 Out[10]: 1 2 2 3 3 4 dtype: int64 In [11]: 3 in sr Out[11]: True In [12]: sr.sum() #求和 Out[12]: 10 In [13]: sr.mean() #求平均数 Out[13]: 2.5 In [14]: sr.index Out[14]: RangeIndex(start=0, stop=4, step=1) In [15]: sr.index=['a','b','c','d'] In [16]: sr Out[16]: a 1 b 2 c 3 d 4 dtype: int64 In [17]: sr.index #索引 Out[17]: Index(['a', 'b', 'c', 'd'], dtype='object') In [18]: sr.values #值 Out[18]: array([1, 2, 3, 4], dtype=int64) In [19]: sr.head() #前5列 Out[19]: a 1 b 2 c 3 d 4 dtype: int64
loc——经过行标签索引行数据
iloc——经过行号索引行数据
ix——经过行标签或者行号索引行数据(基于loc和iloc 的混合) 数据结构
In [20]: sr = pd.Series({'a': 1, 'b': 2}) In [21]: sr.loc['a'] Out[21]: 1 In [22]: sr.iloc[1] Out[22]: 2 In [23]: sr.ix['b'] Out[23]: 2 In [24]: sr.ix[0] Out[24]: 1
pandas在运算时,会按索引进行对齐而后计算。若是存在不一样的索引,则结果的索引是两个操做数索引的并集。
s1 = pd.Series([12, 23, 34], index=['c', 'a', 'd']) s2 = pd.Series([11, 20, 10], index=['d', 'c', 'a']) print(s1 + s2) # 按索引相加 s2 = pd.Series([11, 20, 10], index=['b', 'c', 'a']) print(s1 + s2) # 按索引相加,出现Nan值 在两个Series对象相加时将缺失值设为0 s1.add(s2, fill_value=0)
print(sr.isnull()) # 等于NaN是True print(sr.notnull()) # 不等于NaN是True print(sr[sr.notnull()]) # 过滤空值 print(sr.dropna()) # 过滤空值 print(sr.fillna(0)) # 填充空值
DataFrame是一个表格型的数据结构,含有一组有序的列。
DataFrame能够被看作是由Series组成的字典,而且共用一个索引app
data = [[1, 2, 3], [4, 5, 6]] index = ['x', 'y'] columns = ['a', 'b', 'c'] df = pd.DataFrame(data=data, index=index, columns=columns) print(df.loc['x']) # 指向x索引的行 print(df.iloc[1]) # 指向第二行 print(df.loc['x', 'a']) # 指向x索引的行,a列 print(df.loc['x', ]) # 指向x索引的行,全部列 print(df.index) # 行索引 print(df.columns) # 列索引 print(df.T) # 转置 print(df.values) # 值(二维数组) print(df.describe()) # 每列的统计信息
DataFrame对象在运算时,一样会进行数据对齐,行索引与列索引分别对齐。
结果的行索引与列索引分别为两个操做数的行索引与列索引的并集。函数
DataFrame处理缺失数据的相关方法:工具
df = pd.DataFrame({'one': ['1', '2', np.NAN], 'two': ['a', np.NAN, np.NAN]}) print(df.fillna('0')) # 填充全部带有空的元素 print(df.dropna()) # 删除全部带有空的行 print(df.dropna(how='all')) # 删除全部每列都有空的行 df.loc[2, 'one'] = '3' # 修改值 print(df) print(df.dropna(axis=1)) # 删除为空值的列
- mean #求平均值 - sum #求和 - sort_index #按行或列索引排序 - sort_values #按值排序 - apply(func,axis=0) #axis=0指的是逐行,axis=1指的是逐列。 df.apply(lamada x:x.mean()) #按列求平均 df.apply(lamada x:x['high']+x["low"])/2,axis=1) #按列求平均(最高价和最低价的平均) df.apply(lamada x:x['high']+x["low"])/2,axis=1) #按列求平均(最高价和最低价的平均) - applymap(func) #将函数应用在DataFrame各个元素上 - map(func) #将函数应用在Series各个元素上
举例:spa
df = pd.DataFrame({'one':[1,2,3],'two':[4,5,6],'three':[7,8,9]} ,index=['a','b','c'] ) print(df.mean()) # 按列求平均值 # one 2.0 # two 5.0 # three 8.0 print(df.mean(axis=1)) # 按行求平均值 # a 4.0 # b 5.0 # c 6.0 print(df.sum()) # 求和 # one 6 # two 15 # three 24 print(df.sort_values(by='two')) # 值排序 print(df.sort_values(by='two',ascending=False)) # 值排序(倒序) print(df.sort_values(by='a',ascending=False,axis=1)) # 按行值排序(倒序) print(df.sort_index()) # 索引值排序 print(df.sort_index(ascending=False)) # 索引值排序(倒序) print(df.sort_index(ascending=False,axis=1)) # 按行索引值排序(倒序)
Python标准库:datetime datetime.datetime.timedelta # 表示 时间间隔 dt.strftime() #f:format吧时间对象格式化成字符串 strptime() #把字符串解析成时间对象p:parse 灵活处理时间对象:dateutil包 dateutil.parser.parse('2019/1/29') 处理时间对象:pandas pd.to_datetime(['2011-01-01', '2012-02-02'])
产生时间对象数组:date_range start 开始时间 end 结束时间 periods 时间长度 freq 时间频率,默认为'D',可选H(our),W(eek),B(usiness),S(emi-)M(onth),(min)T(es), S(econd), A(year),… 1、时间序列就是以时间对象为索引的Series或DataFrame。 2、datetime对象做为索引时是存储在DatetimeIndex对象中的。 3、时间序列特殊功能: 传入“年”或“年月”做为切片方式 传入日期范围做为切片方式 丰富的函数支持:resample(), strftime(), …… 批量转换为datetime对象:to_pydatetime()
举例3d
# 转换时间对象 print(pd.to_datetime(['2001-01-01','2001-Feb-21'])) # 生成时间序列 print(pd.date_range('2010-01-01','2011-01-01')) print(pd.date_range('2010-01-01',periods=10)) print(pd.date_range('2010-01-01',periods=10,freq='H')) # 按小时 print(pd.date_range('2010-01-01',periods=10,freq='W')) # 按周 print(pd.date_range('2010-01-01',periods=10,freq='W-MON')) # 按周一 print(pd.date_range('2019-09-01',periods=30,freq='B')) # 按工做日 sr = pd.Series(np.arange(100),index=pd.date_range('2018-01-01',periods=100)) print(sr.index) print(sr['2018-04']) print(sr['2018-03-01':'2018-03-15']) print(sr.resample('M').sum())
read_csv 读取csv文件
read_excel 读取excel文件
读取文件函数主要参数:
print(pd.read_csv('600519.csv',index_col=0)) # 用第1列作索引 print(pd.read_csv('600519.csv',index_col='date')) # 用date列作索引 pd_csv = pd.read_csv('600519.csv',index_col='date',parse_dates=['date']) # 用date列作索引, 并转化为datetime类型 print(pd_csv.index) df.rename(column={0:'a',1:"b"}) #修改列名 print(pd.read_csv('600519.csv',header=None, names=list('abcdefgh'))) # 指定列名 pd.read_csv('600519.csv',header=None, na_values=['None']) # 指定字符串None为Nan
一、写入到文件:
二、写入文件函数的主要参数:
三、其余文件类型:json, XML, HTML, 数据库