获取带有索引的熊猫数据框第一行

时间:2020-05-11 11:27:58

标签: python pandas

最近,我开始在工作中使用熊猫来处理由某些传感器获取的数据 我有一本字典,其中的传感器值采用以下格式:

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分钟获取一次传感器值

2 个答案:

答案 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()})
相关问题