pandas数据处理过程的收获

pandas数据处理过程的收获

为什么要写这个?

因为我c语言写的太多了,写啥都是c语言的样子,导致了我操作dataframe洗超大数据的时候,就会特别特别慢。于是我根据这几次的失败经验总结出了以下的一些dataframe的基本操作。希望以后能够不要再犯错误然后找不到问题了。


两个dataframe的拼接。

a有以下列: loadingOrder, … , TRANSPORT_TRACE , … , endtime

b有以下列: trace , ave_time

其中trace和TRANSPORT_TRACE是对应的,现在需要把a,b对应的ave_time加入到a中。

ret = pd.DataFrame()
for i in range(len(data2)):
    # 筛选条件
    df = data1[(data1.TRANSPORT_TRACE == data2.loc[i]['trace'])]
    df['ave_time'] = data2.loc[i]['ave_time']
    # 使用 contact 进行上下连接, axis=0 表示多行连接
    ret = pd.concat([ret, df], axis=0)
# 删除第一列因为 contact 产生的 index
ret = ret.reset_index(drop=True)

数据的计算与添加结果列 (矩阵运算速度 >> for循环)

数据格式:… , timestamp, speed, …

下一行与上一行的 timestamp 相减得到时间差, 再与 speed 相乘可以得到一段速度。

lat1 = data.latitude
lng1 = data.longitude
lat2 = lat1.shift(1)
lng2 = lng1.shift(1)
sum = np.sum(tool.distances(lat1, lat2, lng1, lng2))*1000
def distances(LatA, LatB, LonA, LonB):
    EARTH_RADIUS = 6378.137  # 千米

    def rad(d):
        return d * np.pi / 180.0

    s = 0
    radLatA = rad(LatA)
    radLatB = rad(LatB)
    a = radLatA - radLatB
    b = rad(LonA) - rad(LonB)
    s = 2 * np.arcsin(
        np.sqrt(np.power(np.sin(a / 2), 2) + np.cos(radLatA) * np.cos(radLatB) * np.power(np.sin(b / 2), 2)))
    s = s * EARTH_RADIUS
    #  保留两位小数
    s = np.round(s * 100) / 100
    # s = s * 1000 # 转换成m
    return s

判断是不是string类型

def isString(obj):
    try:
        obj.lower() + obj.title() + obj + ""
    except:
        return False
    else:
        return True
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值