- 文章架构
场景描述
- 数据挖掘过程中, 会遇到处理/加工多列(series)的需求。例如,计算某些选择列的和、拼接某些列组成新的列(用于筛选比较)等。
- 博文通过小例子,给出解决上述需求的实现过程。
- 有的时候,一些数据需要根据实现排序取最新的,因此文章也涉及将时间串转换为 timestamp 的过程,在此文中一并记录。
Demo实验
- apply 函数的使用与计算
# pandas.core.frame.DataFrame.apply 计算选择列的和
import random
import numpy as np
import pandas as pd
Ns=[] ## 存储测试数据
for N in range(6): ## 生成6 条测试数据
Ns.append([random.randint(60,100),random.randint(60,100),random.randint(50,100)])
scores_df=pd.DataFrame(Ns, columns=['Chinese','Math','English']) ## list 转换为 DataFrame
'''
计算总成绩函数
'''
def get_total_score(C=1,M=2,E=3):
return C+M+E
if __name__=='__main__':
assert get_total_score()==6
assert get_total_score(3,3,3)==9
## 计算选择列(所有列)的数值和
scores_df['total_score']=scores_df.apply(lambda row : get_total_score(row[0],row[1],row[2]), axis=1)
scores_df
- 数据效果
- apply 其他参数使用效果
# Examples
df.apply(numpy.sqrt) # returns DataFrame
# equiv to : 相当于
df.apply(numpy.sum, axis=0) # equiv to df.sum(0) 计算列
df.apply(numpy.sum, axis=1) # equiv to df.sum(1) 计算行
- 计算效果
- 开方
- 按行求和
- 按列求和
- apply 函数拼接字符串
- 利用自定义函数(get_total_score)结合appaly函数特性,实现选择列(series)求和;修改自定义函数即可完成处理字符串列(series)为新列(筛选、过滤)。
- 由于实现简单,这里不再赘述,读者可以自行实现。
mktime 时间串与timestamp(int)转换
- 代码实现
'''
时间串、timestamp转换
'''
def s_to_timestamp(time_s='2018-03-07 12:00:07'):
import time
struct_time=time.strptime(time_s, '%Y-%m-%d %H:%M:%S')
return int(time.mktime(struct_time))
if __name__=='__main__':
print ('%s <==> %d' % (time_s, s_to_timestamp()))
print ('%s <==> %d' % ('2018-03-08 12:00:07', s_to_timestamp('2018-03-08 12:00:07')))
Reference
- Python time mktime()方法 . W3Cschool
- Python time.mktime() Examples
- pandas.DataFrame.apply
- Python时间,日期,时间戳之间转换 . 推荐
- Pandas: How to use apply function to multiple columns . 推荐