鱼C论坛

 找回密码
 立即注册
查看: 2822|回复: 20

[已解决]python pandas series

[复制链接]
回帖奖励 23 鱼币 回复本帖可获得 1 鱼币奖励! 每人限 1 次
发表于 2018-12-23 17:32:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
求助各位爸爸!!!!!真的很急嘤嘤嘤
以下是一段代码

import pandas as pd
import datetime as dt
import pickle
import tarfile

#定义一个可以读取spydata文件的函数
def read_spydata(filename):
    tar = tarfile.open(filename, "r")
    tar.extractall()
    extracted_files = tar.getnames()
    for f in extracted_files:
        if f.endswith('.pickle'):
            with open(f, 'rb') as fdesc:
                data = pickle.loads(fdesc.read())
    return data

def add_microsecond(series):
    num = len(series.index)
    gap = dt.timedelta(seconds=0.001)/num
    time_delta = pd.Series(range(num),index=series.index)
    time_delta = time_delta.apply(lambda x:x*gap+dt.timedelta(seconds=0.000001))
    series = series + time_delta
    return series
        
dict1 = read_spydata('20181221.spydata')
df_Data = dict1['df_Data']

time1 = pd.to_datetime(df_Data.date.values,format="%Y-%m-%d %H:%M:%S.%f")
time1_series = pd.Series(time1,index=time1)
#如果是a = time1_series.groupby(level=0).apply(add_microsecond)就会报错
a = time1_series[406:7609].groupby(level=0).apply(add_microsecond)#这样就不会报错

我的疑惑就在最后一行。如果没有[406:7609]的话程序就会报错,但是这个是我手动发现的,如果以后数据文件换了一个新的我可能还要手动去找,非常的麻烦。有没有大神帮看一下怎么样对series做一下预处理,保证以后无论series换成什么,经过处理以后都可以直接groupby然后apply呢。.spydata文件我放在附件里了,可以供大神们参考。
最佳答案
2018-12-24 20:25:07
问题主要在下面的这个函数
def add_microsecond(series):
    num = len(series.index)
    gap = dt.timedelta(seconds=0.001)/num
    time_delta = pd.Series(range(num),index=series.index)
    time_delta = time_delta.apply(lambda x:x*gap+dt.timedelta(seconds=0.000001))
    series = series + time_delta
    return series
我通过打印观察过,当你的这个文件中的到了2013-07-10 15:00:29就会报错。  
但不知道是由于什么导致这里的轴会重复。

20181221.rar

225.89 KB, 下载次数: 1

数据文件

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-12-23 18:48:00 | 显示全部楼层

回帖奖励 +1 鱼币

你的文件我打不开
把你的报错信息发出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-23 19:42:57 | 显示全部楼层
wongyusing 发表于 2018-12-23 18:48
你的文件我打不开
把你的报错信息发出来

代码里边已经有代码直接打开这个文件了 是一个储存了一些dataframe的dict。
p.s. 报错信息是ValueError: cannot reindex from a duplicate axis
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-23 19:55:00 | 显示全部楼层
lizhenglzs 发表于 2018-12-23 19:42
代码里边已经有代码直接打开这个文件了 是一个储存了一些dataframe的dict。
p.s. 报错信息是ValueError: ...

查了一下,说是ValueError:无法从重复轴重新索引
github上说可以通过下面这句代码找到重复的值
df[df.index.duplicated()]
你试一下行不行,能不能找到。   

如果可以的话,那就把这个重复的值特地拿出来,
作为日志记录后期特殊处理
或者说pass掉
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-23 20:11:55 | 显示全部楼层
wongyusing 发表于 2018-12-23 19:55
查了一下,说是ValueError:无法从重复轴重新索引
github上说可以通过下面这句代码找到重复的值

首先非常非常感谢您的热心帮助。您提供的方法也给了我一些启发。但是我贴到上去的这段代码是有实际意义的,就是还是要结合那个add_microsecond()那个函数来具体看。你如果跑一下我贴上去的最后一行代码的话你会看到即使这次还是有重复但还是可以跑,也不会报错,得出来的a甚至很有意义。所以可能是我没有把我的问题阐述明白
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-23 20:31:31 | 显示全部楼层
lizhenglzs 发表于 2018-12-23 20:11
首先非常非常感谢您的热心帮助。您提供的方法也给了我一些启发。但是我贴到上去的这段代码是有实际意义的 ...

问题是你的附件我打不开啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-23 20:34:43 | 显示全部楼层
wongyusing 发表于 2018-12-23 20:31
问题是你的附件我打不开啊

用代码也打不开吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-23 20:55:33 | 显示全部楼层
lizhenglzs 发表于 2018-12-23 20:34
用代码也打不开吗

解压失败
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-23 21:00:28 | 显示全部楼层

大佬给个邮箱好嘛 我我邮箱发给你?附件不能超过2m
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-23 21:01:39 | 显示全部楼层

不介意的话加个微信也可以
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-23 21:24:42 | 显示全部楼层
lizhenglzs 发表于 2018-12-23 21:01
不介意的话加个微信也可以
wongjyusing@gmail.com
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-24 14:08:36 | 显示全部楼层

大佬你有什么好的见解分享一下的吗, 我的老板已经在提刀赶来的路上了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-24 15:12:13 | 显示全部楼层

回帖奖励 +1 鱼币

帮你顶贴,,本人小白
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-24 19:31:57 | 显示全部楼层
lizhenglzs 发表于 2018-12-24 14:08
大佬你有什么好的见解分享一下的吗, 我的老板已经在提刀赶来的路上了

搞不定,主要是看不懂想实现什么  

你的表,我看不懂要做成什么样子的  

我尝试过找出会导致错误的地方。找不到。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-24 19:59:08 | 显示全部楼层
wongyusing 发表于 2018-12-24 19:31
搞不定,主要是看不懂想实现什么  

你的表,我看不懂要做成什么样子的  

没关系,不管怎么样还是谢谢啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-24 20:25:07 | 显示全部楼层    本楼为最佳答案   
问题主要在下面的这个函数
def add_microsecond(series):
    num = len(series.index)
    gap = dt.timedelta(seconds=0.001)/num
    time_delta = pd.Series(range(num),index=series.index)
    time_delta = time_delta.apply(lambda x:x*gap+dt.timedelta(seconds=0.000001))
    series = series + time_delta
    return series
我通过打印观察过,当你的这个文件中的到了2013-07-10 15:00:29就会报错。  
但不知道是由于什么导致这里的轴会重复。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-6 10:19:54 | 显示全部楼层

回帖奖励 +1 鱼币

支持楼主!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-8 08:38:12 | 显示全部楼层

回帖奖励 +1 鱼币

一脸懵系列
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-28 12:18:58 | 显示全部楼层

回帖奖励 +1 鱼币

围观
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-27 15:01:26 | 显示全部楼层

回帖奖励 +1 鱼币

吓人
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-17 03:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表