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', '搜狗')]

 

posted @ 2017-09-15 17:36  君以沫  阅读(778)  评论(0编辑  收藏  举报