【发布时间】:2014-12-03 19:09:00
【问题描述】:
我遇到了一个问题,当我为唯一索引值过滤数据框时,我的时区信息被剥离(这是使用 groupby() 和 first() 完成的)。例如
import pandas as pd
import pytz
utc = pytz.utc
index = pd.date_range('20140101','20140102',freq='6H',tz=utc)
data = pd.np.random.randint(0,10,(5,3))
namen = list('abc')
df = pd.DataFrame(data=data,index=index,columns=namen)
时区信息现在存储在索引中:
>>>df.index[0]
Timestamp('2014-01-01 00:00:00+0000', tz='UTC')
当我只保留唯一值时,我会丢失时间戳信息。
df = df.groupby(df.index).first()
>>> df.index[0]
Timestamp('2014-01-01 00:00:00', tz=None)
当然,我可以使用 .drop_duplicates() 来做同样的事情(.drop_duplicates() 似乎保留了时区信息),但这对我目前的工作有两个问题:
- drop_duplicates 不对索引进行操作,这很重要(参见 #2)
- 由于我的数据集的性质,我很可能在数据框中有相同的行,因此使用 drop_duplicates 将删除这些原本很好的行。
我可以通过在数据框中创建一个新列来保存索引值来使用 drop_duplicates。例如
df['dates'] = df.index
df = df.drop_duplicates(cols=['dates'])
df.pop('dates')
虽然这行得通,但看起来很草率。这里有没有我看不到的替代方案?
【问题讨论】:
-
我没有看到这个。你用的是什么版本的 pandas、pytz 和 numpy?
-
熊猫 0.12.0,pytz 2013b
标签: python datetime pandas timezone