Pandas 数据准备篇

从csv或者文本文件读取数据

 import pandas as pd

 r = pd.read_csv('example.csv') # 读取csv文件,默认第一行是header column
 r = pd.read_csv('example.csv', header=None) # 读取csv,第一行也是数据
 r = pd.read_table('example.csv', seperator=',') # 读取文件,按逗号分隔

 pd.isnull(r) # return True 对于NaN,-1.#IND和NULL的位置,其它return False
 因此可以用来区分数据有效性
 也可以通过调用时指定na_values来定义对用户的无效数据

 pd.read_csv('example.csv', na_values=['NULL'])

 na_values 可以进一步扩展为每列不同
 na_values = {'column1':['NA'],'column2':['NULL']}

 #读取部分文件 (前N行数据)
 pd.read_csv('example.csv',nrows=N)

 #将DataFrame中的数据输出到csv
 DataFrame.to_csv('output.csv')

 pd.date_range(start,end,period) # pandas data_range 指定了起始日期,结束日期或者持续长度

从数据库里导入数据

 import MySQLdb
 import pandas.io.sql as sql

 #conn 用于建立数据连接
 sql.read_frame('select * from your_table', conn)

例如:

 conn = MySQLdb.connect(host='localhost',user='root',passwd='pass',db='tablename',port=3306,charset='utf8')
 r = sql.read_frame('select * from dw_year', conn)

 >>>
 YEAR_ID  YEAR  PRE_YEAR_ID
0        1  2010          NaN
1        2  2011            1
2        3  2012            2
3        4  2013            3
4        5  2014            4
5        6  2015            5

数据连接 pandas.merge: 将DateFrames按照一定的key进行连接

pandas将dict转为DataFrame: key作为column,value作为每行元素(通常是list)

 df1 = DataFrame({'key1': range(2), 'key2':range(2)})

pandas.merge(df1,df2) 默认按照df1和df2中公有名称的key进行merge 或者显式调用

 pandas.merge(df1,df2,on='keyname')

如果在df1和df2中key名称并不相同,那么可以指定merge的left key和right key

 pandas.merge(df1,df2,left_on='lkey',right_on='rkey')

可以通过how来指定join是left join, right join还是outer join

 pd.merge(df1, df2, how='outer')

看起来merge并没有复杂的操作,实际上是把sql的join操作在DataFrame level上重新进行了一次实现

merge on index : 如果在定义DataFrame的时候用到了index (比如DataFrame({}, index=[‘a’,‘b’]))那么可以通过left_index=True或者right_index=True来指定使用index而非后面的column进行匹配(实际上这里的index是一个特殊的column)