在尝试根据日期时间索引的值对时间序列执行拖放复制时,我正撞在墙上。
我的功能如下:
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
我收到错误
NameError: global name 'index' is not defined
怎么了?
更新:
当 csv 输入文件(将被连接)重叠时,似乎会出现此问题。
inputcsvT = ['./input_csv/A08_KI_T*.csv']
获取文件A08_KI_T5
28/05/2015 17:00,22.973,24.021
...
2015 年 8 月 10 日 13:30,24.368,45.974
A08_KI_T6
2015 年 8 月 10 日 14:00,24.779,41.526
...
10/02/2016 17:00,22.326,41.83
它运行正确,而:
inputcsvT = ['./input_csv/A08_LR_T*.csv']
聚集A08_LR_T5
28/05/2015 17:00,22.493,25.62
...
2015 年 8 月 10 日 13:30,24.296,44.596
A08_LR_T6
28/05/2015 17:00,22.493,25.62
...
10/02/2016 17:15,21.991,38.45
这会导致错误。
最佳答案
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
关于datetime - 如何根据索引列执行pandas drop_duplicates,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38662285/