具有多个日期时间的熊猫数据框

时间:2020-07-21 15:07:25

标签: python pandas

我有一个pandas数据框,它的日期时间在多列中,看起来与下面类似,但有数百列,几乎推了1k。

datetime, battery, datetime, temperature, datetime, pressure
2020-01-01 01:01:01, 13.8, 2020-01-01 01:01:02, 97, 2020-01-01 01:01:03, 10
2020-01-01 01:01:04, 13.8, 2020-01-01 01:01:05, 97, 2020-01-01 01:01:06, 11

我所做的是将其导入,然后使用pd.to_datetime转换每个datetime列。这样可以将内存使用量减少一半以上(从2.4GB到1.0GB),但是我想知道这是否仍然效率低下,也许是一种更好的方法。

  1. 我可以将其转换为3列,其中包含日期时间,数据名称,数据度量值,我将从中受益吗?如果是这样,最好的方法是什么?我已经尝试过了,但是最后有很多空白。

  2. 是否会有另一种方式处理我刚才不提供的数据?

  3. 还是我在做的事情有意义并且足够有效?

我最终希望通过选择特定的数据名称来绘制一些数据。

1 个答案:

答案 0 :(得分:2)

我对上述数据进行了一个小实验,并将数据转换为日期/类型/值列可减少总体内存消耗:

print(df) 

             datetime  battery          datetime.1  temperature          datetime.2  pressure
0 2020-01-01 01:01:01     13.8 2020-01-01 01:01:02           97 2020-01-01 01:01:03        10
1 2020-01-01 01:01:04     13.8 2020-01-01 01:01:05           97 2020-01-01 01:01:06        11

print(df.memory_usage().sum())
==> 224

转换数据框后:

dfs = []
for i in range(0, 6, 2):
    d = df.iloc[:, i:i+2]
    d["type"] = d.columns[1]
    d.columns = ["datetime", "value", "type"]
    dfs.append(d)
new_df = pd.concat(dfs)

print(new_df) 
==>
             datetime  value         type
0 2020-01-01 01:01:01   13.8      battery
1 2020-01-01 01:01:04   13.8      battery
0 2020-01-01 01:01:02   97.0  temperature
1 2020-01-01 01:01:05   97.0  temperature
0 2020-01-01 01:01:03   10.0     pressure
1 2020-01-01 01:01:06   11.0     pressure

print(new_df.memory_usage().sum())
==> 192