我遇到了一个问题,当我过滤一个数据帧的唯一索引值(这是通过使用groupby()和first())来完成时,我的时区信息被剥离掉了。例如pandas groupby strip timezone in index
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')
虽然这个工程,它似乎马虎。这里有没有其他的选择,我没有看到?
我没看到这个。你使用的是什么版本的熊猫,pytz和numpy? – MattDMo 2014-12-03 19:22:52
熊猫0.12.0,pytz 2013b – tnknepp 2014-12-03 19:24:38