数据处理时使用最多的就是pandas库,pandas在数据处理方面很强大,集成了数据处理和数据可视化。
pandas的可视化使用的是matplotlib。
回到主题
问题1:
计算数据的某个字段的所有值,对其字段所有值进行运算
处理的字段数据为时间戳,需要计算该时间戳距离现在的时间,单位为天。
一般方法:
使用现在的时间戳减去整个字段的值,得到距离现在的秒数,最后换算成天。
teble.loc[:,'test'] = (1540281246 - table['test'])/(3600*24)
优化方法:
先使用pandas的时间处理方法,把时间戳转化为时间字符串
然后使用datetime库获取当前时间,最后减去生成的时间字符串。
table['test'] = pd.to_datetime(table['time'],unit='s')
table['test'] = (datetime.datetime.now() - table['test']).dt.days
改优化方法处理速度为一般方法的两倍。
优化思路:
数据处理时尽量避免在字段上直接进行运算,每次运算的运算代价极为昂贵。
pandas字段整体数据运算处理慢,应该避免。
问题2:
根据字段的类别,计算其类别对应的某个字段的值的总和。
一般方法:
使用for对类别进行遍历,每次遍历都计算类别对应某字段的和。
for i in table1.index.values:
table2.loc[i,'class'] = int(table1.loc[i,'value'].sum())
优化方法:
使用pandas的groupby方法对类别进行归类,然后计算总和。
table.groupby('class',as_index = False)['value'].sum()
优化思路:
数据处理时尽量避免使用for等遍历计算与赋值操作,这种操作极为消耗内存资源和计算资源。
尽量使用pandas内置的方法。
问题3:
计算数据表中几个字段的和,生成新字段。
一般方法:
for i in Table.index.values:
Table.loc[i,'t'] = Table.loc[i,'t1']+Table.loc[i,'t2']+Table.loc[i,'t3']
优化方法:
Table['t'] = Table['t1'] + Table['t2'] + Table['t3']
优化思路如问题2所述。
总结
- 数据处理是尽量避免遍历、列运算等等操作,可以使用其他方法代替。
- 多使用pandas内置的方法,这些方法使用简单,性能好,减少代码量。
- 寻找pandas方法,可以经常去pandas官方文档看看,熟悉所有数据操作方法。