我有一个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),但是我想知道这是否仍然效率低下,也许是一种更好的方法。
我可以将其转换为3列,其中包含日期时间,数据名称,数据度量值,我将从中受益吗?如果是这样,最好的方法是什么?我已经尝试过了,但是最后有很多空白。
是否会有另一种方式处理我刚才不提供的数据?
还是我在做的事情有意义并且足够有效?
我最终希望通过选择特定的数据名称来绘制一些数据。
答案 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