美文网首页
记一次帮学妹写简单csv脚本

记一次帮学妹写简单csv脚本

作者: homosum | 来源:发表于2017-03-19 16:34 被阅读0次

一个月前,学妹找我写一个处理大量实验数据的脚本,届时刚好在看数据分析的书,大致了解了下需求,需要将一个有一万多行数据的csv文件整理在一个表内。
原始数据如下:


原始数据截图.png

每一组数据三行,第一行为数据名,第二行为列,第三行为对应列数据。
将第一组数据名提取出来作为表的表名列,其中各组数据的列不尽相同,需要找到所有数据组最大列集合并合成为一个表格,对应列没有数据的时候用NA填充。
需求很简单,大致思路是用先建立model,将各组数据提取到model中,提取表名添加到第三行中,并在第二行中添加name列,组成新的字典。用集合方法找到最全列作为key,NA作为value组成大字典,用小字典更新大字典,最后用pandas形成表格,输出处理好的csv文件。
代码如下

  • 建立原始数据model来存储csv文件数据
    class OriData():
    def init(self):
    self.name=[]
    self.property=[]
    self.values=[]
    #get model dict
    def get_oriData_array(path):
    csv_reader = csv.reader(open(path))
    i=0
    result=[]
    for row in csv_reader:
    i+=1
    if i%3==1:
    item = OriData()
    item.name=row
    elif i%3==2:
    item.property=row
    else:
    item.values=row
    result.append(item)
    return result

  • 用集合方法获取所有列的并集
    #get max culumns
    def get_all_property(array):
    set_end=set()
    for item in array:
    #use set to find the most complete columns
    set_end=set_end.union(set(item.property))
    return list(set_end)

  • 使用python自带的zip和字典的update方法获取最大列对应字典
    def make_dict_array(array):
    dict_array=[]
    properties=get_all_property(array)
    properties.insert(0,'name')
    for item in array:
    dic=dict.fromkeys(properties,'NA')
    keys=item.property
    values=repleace_space(item.values)
    name=item.name[0]
    keys.insert(0,'name')
    values.insert(0,name)
    # use zip and dict commbine data and key
    temp_array=zip(keys,values)
    temp_dict=dict(temp_array)
    dic.update(temp_dict)
    dict_array.append(dic)
    return dict_array

  • 最后用pandas的DataFrame形成新的表格,并输出csv文件
    path=raw_input('Enter the file path you want to deal:\n')
    result_array=get_oriData_array(path)
    dic_array=make_dict_array(result_array)
    columns_array=get_all_property(result_array)
    columns_array.insert(0,'name')
    # transform dict_array to DataFrame
    frame=DataFrame(dic_array,columns=columns_array)
    # fill the null with 'NA'
    frame.fillna('NA')
    # update the csv file
    frame.to_csv(path)
    raw_input('Finished!(Tap any key to exit)')

整个过程就这么几个函数,我们在终端运行该python如下:

运行pyhton文件.png

将要处理的原始csv文件扔进终端,回车,即可得到处理好的csv文件了

处理csv文件.png

Excel打开处理后的csv文件,如下,各组数据已经整合在一个最大化列的表格之中,缺失数据使用NA进行了填充,以后产生的实验数据也可以添加进csv文件用脚本进行处理。

处理完成的csv文件.png

数万组数据的情况下,不用脚本,人力不太可能完成,但用脚本写起来的话,也就几个简单的函数而已,甚至用到的Pandas和Numpy库的地方都很少。恩,用python帮帮学妹,提高生产力还是很不错的。

相关文章

网友评论

      本文标题:记一次帮学妹写简单csv脚本

      本文链接:https://www.haomeiwen.com/subject/erimnttx.html