最近,我开始在工作中使用熊猫来处理由某些传感器获取的数据 我有一本字典,其中的传感器值采用以下格式:
data={
2019-10-23 00:00:00: {
key1: value1,
key2: value2,
...
keyN: valueN
},
2019-10-23 00:00:03: {
key1: value1,
key2: value2,
...
keyN: valueN
},
...
}
我创建了一个熊猫数据框:
dataframe = pandas.DataFrame.from_dict(data, orient="index")
结果数据帧如下:
Whole Dataframe:
co no2 ... temperature illuminance
2019-10-23 00:00:43 298.66458 0.000000 ... 15.498970 0.0
2019-10-23 00:00:44 305.92203 0.000000 ... 15.498970 0.0
2019-10-23 00:00:37 298.66458 3.456714 ... 15.498970 0.0
2019-10-23 00:00:50 305.92203 0.000000 ... 15.498970 0.0
2019-10-23 00:00:45 305.92203 0.000000 ... 15.498970 0.0
... ... ... ... ... ...
2019-10-23 23:33:59 327.05542 0.000000 ... 14.740597 0.0
2019-10-23 23:38:37 296.85214 0.000000 ... 14.687190 0.0
2019-10-23 23:43:38 289.69748 0.000000 ... 14.612421 0.0
2019-10-23 23:50:38 282.21335 15.672545 ... 14.526970 0.0
2019-10-23 23:54:44 297.21220 0.000000 ... 14.505608 0.0
现在我需要能够获取第一行的值,我尝试使用.iloc[0]
和to_dict()
来获取通过api rest发送的字典:
selected_value = dataframe.iloc[0].to_json()
打印此:
Selected value:
{"co":298.66458,"no2":3.456714,"o3":53.318943,"so2":0.0,"humidity":65.13771,"pm1":0.0198951,"pm10":0.0209116,"pm25":0.0209116,"temperature":15.49897,"illuminance":0.0}
但是它不返回索引,我想得到这样的东西(或者至少包括索引):
{"2019-10-23 00:00:43":
{
"co":298.66458,
"no2":3.456714,
"o3":53.318943,
"so2":0.0,
"humidity":65.13771,
"pm1":0.0198951,
"pm10":0.0209116,
"pm25":0.0209116,
"temperature":15.49897,
"illuminance":0.0
}
}
有什么办法吗?
PD:表示我执行了一些中间步骤,以使用between_time
方法每10分钟获取一次传感器值
答案 0 :(得分:0)
您可以改为使用head
,例如:
# example data
df = pd.DataFrame({'a':range(2), 'b':range(2,4)},
index=pd.to_datetime(['01/01/2018','02/01/2018']).strftime('%Y-%m-%d %H:%M:%S'))
print (df.head(1).to_json(orient='index'))
{"2018-01-01 00:00:00":{"a":0,"b":2}}
#or to_dict maybe
print (df.head(1).to_dict(orient='index'))
{'2018-01-01 00:00:00': {'a': 0, 'b': 2}}
答案 1 :(得分:0)
由于您选择了索引,因此不会返回
如果您希望索引成为数据的一部分,则可以随时对其进行设置:
df.reset_index(inplace=True)
df.rename(columns={df.columns[0]:'timestamp'},inplace=True)
然后执行df.iloc[0]
也会返回timestamp
,就像每隔一列一样
如果您不希望它成为数据的一部分,则始终可以使用dataframe.index
直接构建所需的内容:
import json
json.dumps({df.index[0]:df.iloc[0].to_dict()})