标签:
查询写入操作
pandas可以类似sql一样有强大的查询功能,而且写法简单:
print tips[[‘total_bill‘, ‘tip‘, ‘smoker‘, ‘time‘]] #显示‘total_bill‘, ‘tip‘, ‘smoker‘, ‘time‘列,功能类似于sql中的select命令 print tips[tips[‘time‘] == ‘Dinner‘] #显示time列中等于Dinner的数据,功能类似于sql中的Where命令 print tips[(tips[‘size‘] >= 5) | (tips[‘total_bill‘] > 45)] print tips[(tips[‘time‘] == ‘Dinner‘) & (tips[‘tip‘] > 5.00)] # |功能类似于sql中的or命令, &功能类似于sql中的and命令 #index和label查询 df.iloc[i:j,k:p]#iloc操作index,输出第i行到第j行和第k列和第p列中的数值 df.loc[‘20130102‘:‘20130104‘,[‘A‘,‘B‘]]#loc操作label,输出行为‘20130102‘:‘20130104‘,列为‘A‘,‘B‘ df.at[dates[0],‘A‘]#返回特定行label和列label的数值 #map函数操作 df[‘Oid‘] = df[‘Name‘].map(lambda x: int(x.split(‘ - ‘)[0])) #删除列 del df[‘smoker‘] #增加列 df[‘smoker‘] = np.nan #删除行 df = df.drop([i for i in range(1,100)],axis=0)#删除100行 #增加行 df = df.append(pd.DataFrame( index=[i for i in range(100,200)],columns=df.columns),ignore_index=True)#增加一百行
使用pandas写一个将一维关系表写成展二维开式关系表,代码如下:
def one2two(filepath,col_value): ‘‘‘ 该关系表为一个Oid字段和一个Did的字段,两个字段对应一个数字co_value,该函数将Oid和Did 字段中数值转换成一个以Oid为列,Did为行的二维数据表。 ‘‘‘ df = pd.read_csv(filepath) newdf = pd.DataFrame(columns=df[‘Oid‘].unique(),index=df[‘Did‘].unique()) time = len(newdf.index) for i in newdf.index: for c in newdf.columns: #通过查询获得Oid和Did对应的值 value = df[df.Did==c][df[df.Did==c].Oid==i] newdf[c][i] = value[col_value] time=time-1 print ‘Ater %d the app will leave.‘%time print ‘Ready to write.‘ newdf.to_csv(col_value+‘.csv‘) print ‘Finsh write, the %s.cvs was generated‘%col_value
pandas除了查询不错在bigfile处理也相当可观,如下面从一个大文件中提取要素保存的函数:
def save(pathfile,outPath): reader = pd.read_csv(pathfile,iterator=True)#使用iterator,使pandas可以分开读取文件 loop = True chunkSize = 1000000 chunks = [] while loop: try: #划分成chunksize行大小的块进行读取 df = reader.get_chunk(chunkSize) chunks.append(df) except StopIteration: loop = False print ‘Iteration is stopped.‘ try: #将块连接起来,这里用了一个try,因为不知道怎么的总是发生内存错误,如果不用try..finally后面 #代码总是无法运行,但不知道加了try..finally对数据是否有影响? df = pd.concat(chunks, ignore_index=True) finally: df = df[[‘Name‘,‘Total_length‘,‘Total_time‘]] #提出Name字段中数值中‘ - ‘之前的放入Oid中 df[‘Oid‘] = df[‘Name‘].map(lambda x: int(x.split(‘ - ‘)[0])) df[‘Did‘] = df[‘Name‘].map(lambda x: int(x.split(‘ - ‘)[1])) del df[‘Name‘] df.to_csv(outPath) print ‘Finsh.‘
标签:
原文地址:http://my.oschina.net/Kanonpy/blog/389340