Python的大熊猫暧昧时间指数
问题描述:
在这里看到我的熊猫数据框:Python的大熊猫暧昧时间指数
press222
datetime
2017-03-31 14:02:04 110.854683
2017-03-31 14:02:04 110.855759
2017-03-31 14:02:04 110.855103
2017-03-31 14:02:04 110.853790
2017-03-31 14:02:05 110.854034
2017-03-31 14:02:05 110.855103
2017-03-31 14:02:05 110.854683
2017-03-31 14:02:05 110.855698
2017-03-31 14:02:05 110.853851
2017-03-31 14:02:06 110.854385
2017-03-31 14:02:06 110.853905
2017-03-31 14:02:06 110.854988
2017-03-31 14:02:06 110.854988
2017-03-31 14:02:06 110.854988
你可以看到,我有每秒多个值,但遗憾的是时间标记在整个秒(记录器没有吐出毫秒) ,这使得它不明确。有什么方法可以得到属于“同一秒”的值的平均值,因此在本例中,平均值为14:02:04,一个为05,一个为06?
(实际数据框当然是太长手工做的...)
我试图滚动的意思是这样:
df.rolling('S').mean()
我得到不同的值,但仍然是相同的时间列(=索引)。我想每秒只保留一行,并显示相应的平均值。 希望你的帮助 - 谢谢!
答
,你可以对指数groupby
并调用mean
:
In [285]:
df.groupby(level=0).mean()
Out[285]:
press222
datetime
2017-03-31 14:02:04 110.854834
2017-03-31 14:02:05 110.854674
2017-03-31 14:02:06 110.854651
因此,所有重复的值塌陷成一个单一的日期时间录入
要做到这一点阅读,你可以在块读取并执行上述但是如果重复条目跨越大块,您仍然需要执行上述操作,但它会压缩第一个读取df:
In [291]:
import io
import pandas as pd
t="""datetime,press222
2017-03-31 14:02:04,110.854683
2017-03-31 14:02:04,110.855759
2017-03-31 14:02:04,110.855103
2017-03-31 14:02:04,110.853790
2017-03-31 14:02:05,110.854034
2017-03-31 14:02:05,110.855103
2017-03-31 14:02:05,110.854683
2017-03-31 14:02:05,110.855698
2017-03-31 14:02:05,110.853851
2017-03-31 14:02:06,110.854385
2017-03-31 14:02:06,110.853905
2017-03-31 14:02:06,110.854988
2017-03-31 14:02:06,110.854988
2017-03-31 14:02:06,110.854988"""
chunks=[]
for chunk in pd.read_csv(io.StringIO(t), parse_dates=[0], index_col=[0], chunksize=3):
chunks.append(chunk.groupby(level=0).mean())
final_df = pd.concat(chunks)
final_df
Out[291]:
press222
datetime
2017-03-31 14:02:04 110.855182
2017-03-31 14:02:04 110.853790
2017-03-31 14:02:05 110.854568
2017-03-31 14:02:05 110.854744
2017-03-31 14:02:06 110.854426
2017-03-31 14:02:06 110.854988
你可以看到,我们仍然有重复的条目,但DF比,如果我们没有预先处理,所以我们仍然需要将groupby
再次进行小:
In [292]:
final_df.groupby(level=0).mean()
Out[292]:
press222
datetime
2017-03-31 14:02:04 110.854486
2017-03-31 14:02:05 110.854656
2017-03-31 14:02:06 110.854707
完美!在读取文件中的数据(使用'read_csv')时有没有办法做到这一点?这不是强制性的,但很高兴知道 – Robert
您可以分块读取并压缩每个块,但是如果条目跨越多个块,那么最终您会完成上述操作。这真的取决于文件的大小,我会发布一个更新 – EdChum
看到更新它有助于减少最初的阅读,但你仍然需要再次'groupby' – EdChum