一个月前,学妹找我写一个处理大量实验数据的脚本,届时刚好在看数据分析的书,大致了解了下需求,需要将一个有一万多行数据的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文件.pngExcel打开处理后的csv文件,如下,各组数据已经整合在一个最大化列的表格之中,缺失数据使用NA进行了填充,以后产生的实验数据也可以添加进csv文件用脚本进行处理。
处理完成的csv文件.png数万组数据的情况下,不用脚本,人力不太可能完成,但用脚本写起来的话,也就几个简单的函数而已,甚至用到的Pandas和Numpy库的地方都很少。恩,用python帮帮学妹,提高生产力还是很不错的。
网友评论