这个问题与我之前的一个问题(Remapping `numpy.array` with missing values)有点关系,当时我正为丢失数据的时间序列而挣扎,有人建议“使用熊猫!”。所以我来。。。在
我处理的是大数据集,基本上是由来自不同观测点的时间序列组成,我想在这里对这些观测点进行统计比较。这些数据集相当混乱;大量丢失的数据(用-99
表示)、丢失的时间记录(一个站点可能有时间记录,另一个站点没有),我只想包括/比较数据,其中要么(1)所有站点都有某个变量的数据,要么(2)我要比较的两个站点都有该变量的数据,忽略其他站点是否有数据。在
举个最小的例子:
import pandas as pd
from io import StringIO
data = StringIO("""\
1, 2001-01-01, 00:00, 1.0, 0.5, 1.0
1, 2001-01-01, 01:00, 1.1, 0.6, 2.0
1, 2001-01-01, 02:00, 1.2, 0.7, 3.0
1, 2001-01-01, 03:00, 1.3, 0.8, 4.0
2, 2001-01-01, 00:00, 2.0, -99, -99
2, 2001-01-01, 01:00, -99, 1.6, 2.0
2, 2001-01-01, 02:00, 2.2, 1.7, 3.0
2, 2001-01-01, 03:00, 2.3, 1.8, 4.0
3, 2001-01-01, 00:00, 3.0, 2.5, 1.0
3, 2001-01-01, 01:00, 3.1, 2.6, -99
3, 2001-01-01, 02:00, -99, -99, 3.0
3, 2001-01-01, 03:00, 3.3, 2.8, 4.0
3, 2001-01-01, 04:00, 3.4, 2.9, 5.0
""")
columns = ['id','date','time','T','Td','cc']
df = pd.read_table(data, header=None, names=columns, delimiter=',', na_values=-99, parse_dates=[['date','time']])
其中-99
表示缺少值。我想比较来自不同站点(列id
)的数据(列T
,Td
,cc
),但如前所述,只有两个或所有{
所以在这个例子中,如果所有站点都需要有数据,比较T
只会导致比较来自2001-01-01, 00:00
和{id=2
或{T
,而{id
中完全不存在
我已经玩了几个小时了,但说实话,我真的不知道从哪里开始。是否可以使用上面概述的标准提取一个numpy.array
,大小为n_sites x n_valid_values
(3x2
,在这个例子中),然后我可以用它来做进一步的分析?在
编辑作为一个部分但实际上(确实)丑陋的解决方案,类似这样的方法似乎有效:
^{pr2}$但这仍然没有删除id=3
,date_time=2001-01-01, 04:00
的记录,我想/希望有更优雅的方法使用Pandas
。在
一种可行的方法(基于此:https://stackoverflow.com/a/34985243/3581217答案)是创建一个
Dataframe
,其中来自不同站点的观测值具有不同的列,然后使用subset
设置为所有列或我要比较的两个站点,这将删除丢失数据的所有行。在得到的
^{pr2}$Dataframe
看起来像:如果我只想比较两个站点,在本例中忽略
T3
,那么df.dropna(subset=['T1','T2'])
会导致:这是走这条路吗?还是觉得有点不像熊猫。。?在
相关问题 更多 >
编程相关推荐