lizhenglzs 发表于 2018-12-23 17:32:49

python pandas series

求助各位爸爸!!!!!真的很急嘤嘤嘤{:10_243:}
以下是一段代码

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.groupby(level=0).apply(add_microsecond)#这样就不会报错

我的疑惑就在最后一行。如果没有的话程序就会报错,但是这个是我手动发现的,如果以后数据文件换了一个新的我可能还要手动去找,非常的麻烦。有没有大神帮看一下怎么样对series做一下预处理,保证以后无论series换成什么,经过处理以后都可以直接groupby然后apply呢。.spydata文件我放在附件里了,可以供大神们参考。

wongyusing 发表于 2018-12-23 18:48:00

你的文件我打不开
把你的报错信息发出来

lizhenglzs 发表于 2018-12-23 19:42:57

wongyusing 发表于 2018-12-23 18:48
你的文件我打不开
把你的报错信息发出来

代码里边已经有代码直接打开这个文件了 是一个储存了一些dataframe的dict。
p.s. 报错信息是ValueError: cannot reindex from a duplicate axis

wongyusing 发表于 2018-12-23 19:55:00

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

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

如果可以的话,那就把这个重复的值特地拿出来,
作为日志记录后期特殊处理
或者说pass掉

lizhenglzs 发表于 2018-12-23 20:11:55

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



首先非常非常感谢您的热心帮助。您提供的方法也给了我一些启发。但是我贴到上去的这段代码是有实际意义的,就是还是要结合那个add_microsecond()那个函数来具体看。你如果跑一下我贴上去的最后一行代码的话你会看到即使这次还是有重复但还是可以跑,也不会报错,得出来的a甚至很有意义。所以可能是我没有把我的问题阐述明白{:10_266:}

wongyusing 发表于 2018-12-23 20:31:31

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

问题是你的附件我打不开啊

lizhenglzs 发表于 2018-12-23 20:34:43

wongyusing 发表于 2018-12-23 20:31
问题是你的附件我打不开啊

用代码也打不开吗

wongyusing 发表于 2018-12-23 20:55:33

lizhenglzs 发表于 2018-12-23 20:34
用代码也打不开吗

解压失败

lizhenglzs 发表于 2018-12-23 21:00:28

wongyusing 发表于 2018-12-23 20:55
解压失败

大佬给个邮箱好嘛 我我邮箱发给你?附件不能超过2m

lizhenglzs 发表于 2018-12-23 21:01:39

wongyusing 发表于 2018-12-23 20:55
解压失败

不介意的话加个微信也可以

wongyusing 发表于 2018-12-23 21:24:42

lizhenglzs 发表于 2018-12-23 21:01
不介意的话加个微信也可以

wongjyusing@gmail.com

lizhenglzs 发表于 2018-12-24 14:08:36

wongyusing 发表于 2018-12-23 21:24


{:10_266:}{:10_266:}大佬你有什么好的见解分享一下的吗, 我的老板已经在提刀赶来的路上了{:10_266:}

扩展阅读 发表于 2018-12-24 15:12:13

帮你顶贴,,本人小白{:10_245:}

wongyusing 发表于 2018-12-24 19:31:57

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

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

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

我尝试过找出会导致错误的地方。找不到。

lizhenglzs 发表于 2018-12-24 19:59:08

wongyusing 发表于 2018-12-24 19:31
搞不定,主要是看不懂想实现什么

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


没关系,不管怎么样还是谢谢啦{:10_257:}

wongyusing 发表于 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就会报错。
但不知道是由于什么导致这里的轴会重复。

常德水鱼村 发表于 2019-1-6 10:19:54

支持楼主!

守望星星 发表于 2019-1-8 08:38:12

一脸懵系列

小小小菜菜菜 发表于 2019-1-28 12:18:58

围观

心驰神往 发表于 2020-11-27 15:01:26

吓人
页: [1] 2
查看完整版本: python pandas series