在尝试根据日期时间索引的值执行时间序列的删除重复时,我正在撞墙。
我的功能如下:
DLXRD18LH1MK A4F1E89AXXXX
DLXRF02CH1MK A4F1E89AXXXX
DLXRK0C9H1MK 8489AD32XXXX
DLXRL0GPH1MK 8489AD34XXXX
由以下人员调用:
def csv_import_merge_T(f):
dfsT = [pd.read_csv(fp, index_col=[0], parse_dates=[0], dayfirst=True, names=['datetime','temp','rh'], header=0) for fp in files]
dfT = pd.concat(dfsT)
#print dfT.head(); print dfT.index; print dfT.dtypes
dfT.drop_duplicates(subset=index, inplace=True)
dfT.resample('H').bfill()
return dfT
我收到错误
inputcsvT = ['./input_csv/A08_KI_T*.csv']
for csvnameT in inputcsvT:
files = glob.glob(csvnameT)
print ('___'); print (files)
t = csv_import_merge_T(files)
print csvT
出了什么问题?
更新 当csv输入文件(要连接)重叠时,似乎会出现这个问题。
NameError: global name 'index' is not defined
获取文件
的 A08_KI_T5
28/05/2015 17:00,22.973,24.021
...
08/10/2015 13:30,24.368,45.974
A08_KI_T6
08/10/2015 14:00,24.779,41.526
...
2016年10月20日17:00,22.326,41.83
它运行正常,而:
inputcsvT = ['./input_csv/A08_KI_T*.csv']
收集了
的 A08_LR_T5
28/05/2015 17:00,22,493,25.62
...
08/10/2015 13:30,24.296,44.596
的 A08_LR_T6
28/05/2015 17:00,22,493,25.62
...
2016年2月10日17:15,21.991,38.45
这会导致错误。
答案 0 :(得分:2)
IIUC您可以再次致电reset_index
然后drop_duplicates
然后set_index
:
In [304]:
df = pd.DataFrame(data=np.random.randn(5,3), index=list('aabcd'))
df
Out[304]:
0 1 2
a 0.918546 -0.621496 -0.210479
a -1.154838 -2.282168 -0.060182
b 2.512519 -0.771701 -0.328421
c -0.583990 -0.460282 1.294791
d -1.018002 0.826218 0.110252
In [308]:
df.reset_index().drop_duplicates('index').set_index('index')
Out[308]:
0 1 2
index
a 0.918546 -0.621496 -0.210479
b 2.512519 -0.771701 -0.328421
c -0.583990 -0.460282 1.294791
d -1.018002 0.826218 0.110252
修改强>
实际上有一种更简单的方法是在索引上调用duplicated
并将其反转:
In [309]:
df[~df.index.duplicated()]
Out[308]:
0 1 2
index
a 0.918546 -0.621496 -0.210479
b 2.512519 -0.771701 -0.328421
c -0.583990 -0.460282 1.294791
d -1.018002 0.826218 0.110252