今天总结一下最近工作中遇到的小知识点和一些小坑:
关于文件操作方面:
json文件的操作最近工作也经常用,关于文件读写操作py2中出问题最多的地方就在于编码问题,不再总结,数据分析三剑客:numpy,pandas,matplotlab,这里写下pandas的一些用法
pandas是非常实用的一个库,他能读取各种格式的文件并进行操作:
在工作中原来有两个文件,两个文件大概有二百四十万和几万的数据,要在大文件里把小文件有的ID找出来,并生成新的文件,用常规的循环嵌套方法,即使开了多进程,效率也是极低的(在公司大概跑一整天还容易出问题),但是用pandas的方法就大大提高了效率
一、pandas.merge():首先看一下它里面提供的参数
left 参与合并的左侧DataFrame
right 参与合并的右侧DataFrame
how 连接方式:‘inner’(默认);还有,‘outer’、‘left’、‘right’(类似mysql数据库的主从表查询)
on 用于连接的列名,必须同时存在于左右两个DataFrame对象中,如果位指定,则以left和right列名的交集作为连接键
left_on 左侧DataFarme中用作连接键的列
right_on 右侧DataFarme中用作连接键的列
left_index 将左侧的行索引用作其连接键
right_index 将右侧的行索引用作其连接键
sort 根据连接键对合并后的数据进行排序,默认为True。有时在处理大数据集时,禁用该选项可获得更好的性能
suffixes 字符串值元组,用于追加到重叠列名的末尾,默认为(‘_x’,‘_y’).例如,左右两个DataFrame对象都有‘data’,则结果中就会出现‘data_x’,‘data_y’
用这个方法针对上面那个问题,先把两个文件读出来,pd.merge("table1","table2",on="entity_id")
how用默认的内连接即可,这个方法不到一分钟即可完成任务,可见,工欲善其事,必先利其器,针对问题选择一个好的方法是多么重要。
如果想根据两个字段提取信息的话在on=“”里面用一个列表即可,非常强大
二、’对于数据的去重,pd.DataFrame.drop_duplicates()即可,里面填要根据那个字段去重的字段
subset : 用来指定特定的列,默认所有列
keep : {‘first’, ‘last’, False}, 默认 ‘first’,删除重复项并保留第一次出现的项
inplace : boolean, 默认 False,是直接在原来数据上修改还是保留一个副本
三、在操作完数据以后,可以用pandas.to_...将结果保存至任意格式的文件,上面能读多少格式,这里就能写多少格式,很强大,需要注意的是在写入json格式的时候,注意参数orient
如果是Series转json,默认的orient是’index’,orient可选参数有 {‘split’,’records’,’index’}
如果是DataFrame转json,默认的orient是’columns’,orient可选参数有 {‘split’,’records’,’index’,’columns’,’values’}
json的格式如下
split,样式为 {index -> [index], columns -> [columns], data -> [values]}
records,样式为[{column -> value}, … , {column -> value}]
index ,样式为 {index -> {column -> value}}
columns,样式为 {index -> {column -> value}}
在转成json的时候一般按行,即orient=‘index’,但这样他会生成一个自增索引,这个不希望被看到,这时候读出她来,创建新的json文件存入有自增索引的文件的value即可。
下次继续总结( ^_^ )
2019年2月24日16:32:48