datetime - 如何根据索引列执行pandas drop_duplicates

标签 datetime pandas duplicates time-series

在尝试根据日期时间索引的值对时间序列执行拖放复制时,我正撞在墙上。

我的功能如下:

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/

相关文章:

python - 基于变量类型的条件字符串表示

python - pandas - 多个 'yes/no' 虚拟变量

php - 以编程方式删除数据库字段上的重复项

java - 如何避免在 Java 中由 math.random 数字创建的数组中创建重复项?

python-3.x - pandas:如何计算按条件选择的时间范围窗口中的值

c# - 将基本类型(日期、数字)转换为字符串并返回以保存到 C# 中的数据库

python - 如何将默认值归咎于 Pandas 数据框列?

mysql - 具有重复表名的 SELECT 语句

sql-server - 无法使用 SSIS 中的表达式将字符串转换为 DateTime

python - 重新排列 panda 数据帧列中的值