Python pandas学习笔记
参考文献:《Python金融大数据分析》
#导入模块 import pandas as pd #生成dataframe df = pd.DataFrame([10,20,30,40], columns=['numbers'],index=['a','b','c','d']) print('df:', df) #常用的一些操作 print('df.index:', df.index) print('df.columns:', df.columns) print("df.sum():", df.sum()) #以下操作等价 print(df**2) print(df.apply(lambda x: x**2)) #关于索引的使用 #print("df.ix['a']:", df.ix['a']) #print("df.ix[['a','c']]:", df.ix[['a','c']]) #print("df.ix[ df.index[[1,3]] ]:", df.ix[ df.index[[1,3]] ]) print("df['numbers']:", df['numbers']) #添加数据 #直接添加一列数据 df['float'] = (1.5, 2.3, 4.5, 6.7) print('df:', df) print("df['float']:", df['float']) #print("df['float'].ix[['a', 'b']]", df['float'].ix[['a', 'b']]) #可以直接取dataframe作为一列,通过index指定对应的行 df['names'] = pd.DataFrame(['tom', 'lucy', 'denny', 'kate'], index=['d', 'c', 'b', 'a']) print('df:', df) #如果指定了一个不存在的index,那么默认不添加该记录,只添加已有index的记录,没有指定的index,默认值为NaN df['names_s'] = pd.DataFrame(['tom', 'lucy', 'denny', 'king'], index=['d', 'c', 'b', 'z']) print('df:', df) #补充数据,注意使用append方法不直接修改原dataframe #注意。该方式下索引变更为简单索引,这是一个问题 df1 = df.append({'names':'haha', 'numbers':100, 'float':0.01, 'names_s':'xixi'}, ignore_index=True) print('df:', df) print('df1:', df1) #一个正确提供索引信息的方式 df = df.append( pd.DataFrame( {'names':'haha', 'numbers':100, 'float':0.01, 'names_s':'xixi'}, index=['z',]) ) print('df:', df) #缺漏信息的处理:以原结构的索引为基准,不改变索引数目和名称,join默认添加已经存在的索引,新添加的(即原先不存在的)索引不添加新的索引和值,已存在未指定数值的索引默认值为NaN df2 = df.join( pd.DataFrame([11,22,33,44,55], index=['a', 'b', 'c', 'd', 'y'], columns=['int']) ) print('df2:', df2) #实现并集连接:即实现添加新的索引 df = df.join( pd.DataFrame([11,22,33,44,55], index=['a', 'b', 'c', 'd', 'y'], columns=['int']), how='outer' ) print('df:', df) #一些结果 print( "df[['numbers', 'int']].mean():", df[['numbers', 'int']].mean() ) print( "df[['numbers', 'int']].std():", df[['numbers', 'int']].std() )
小括号匹配的问题
import re #小括号:匹配整个字段,但结果只取括号中匹配的字符串 text = r'http://baidu.com' p = r'http://(.+?).com' pat = re.compile(p) print(pat.findall(text))#结果是['baidu'] text2 = r'matlab.python.ruby.python.c' p2 = r'matlab.+?.ruby' pat2 = re.compile(p2) print(pat2.findall(text2))#结果是['matlab.python.ruby'] p3 = r'matlab(.+?.)ruby' pat3 = re.compile(p3) print(pat3.findall(text2))#结果是['.python.'] #如果需要精确匹配括号,通过添加反斜杠\的方式转义 text4 = r'matlab(python)ruby.matlab.python.ruby.c' p4 = r'matlab(.+?.)ruby' pat4 = re.compile(p4) print(pat4.findall(text4))#结果是['(python)', '.python.'] p5 = r'matlab(\(.+?.\))ruby' pat5 = re.compile(p5) print(pat5.findall(text4))#结果是['(python)'] #匹配同一文本串中多个子部分内容 text6 = r'target="http://www.baidu.com" is "百度" and target="http://www.sougou.com" is "搜狗"' p6 = r'target="(.+?)" is "(.+?)"' pat6 = re.compile(p6) print(pat6.findall(text6))#结果是[('http://www.baidu.com', '百度'), ('http://www.sougou.com', '搜狗')]