侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

pandas与表处理

2022-07-08 星期五 / 0 评论 / 0 点赞 / 57 阅读 / 5378 字

查询写入操作 pandas可以类似sql一样有强大的查询功能,而且写法简单: printtips[['total_bill','tip','smoker','time']]#显示'total_bill

查询写入操作

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.'


广告 广告

评论区