pandas 如何在同一 Dataframe 中添加具有新标题信息的新行

p8ekf7hl  于 2023-01-15  发布在  其他
关注(0)|答案(1)|浏览(154)

我写了一段代码来从一个URL中检索JSON数据。它工作得很好。我给出了开始和结束日期,它在日期范围内循环,并将所有内容附加到 Dataframe 中。
列中填充了JSON数据sensor及其对应值,因此列名类似于sensor_1。当我从URL请求数据时,有时会出现新传感器,旧传感器关闭,不再提供数据,并且列的长度经常发生变化。在这种情况下,我的代码只是添加新列。
我想要的是在正在进行的 Dataframe 中用一个新的标题来代替新的列。
我的代码目前得到的:

datetime;sensor_1;sensor_2;sensor_3;new_sensor_8;new_sensor_9;sensor_10;sensor_11;
2023-01-01;23.2;43.5;45.2;NaN;NaN;NaN;NaN;NaN;
2023-01-02;13.2;33.5;55.2;NaN;NaN;NaN;NaN;NaN;
2023-01-03;26.2;23.5;76.2;NaN;NaN;NaN;NaN;NaN;
2023-01-04;NaN;NaN;NaN;75;12;75;93;123;
2023-01-05;NaN;NaN;NaN;23;31;24;15;136;
2023-01-06;NaN;NaN;NaN;79;12;96;65;72;

我想要的:

datetime;sensor_1;sensor_2;sensor_3;
2023-01-01;23.2;43.5;45.2;
2023-01-02;13.2;33.5;55.2;
2023-01-03;26.2;23.5;76.2;
datetime;new_sensor_8;new_sensor_9;sensor_10;sensor_11;
2023-01-04;75;12;75;93;123;
2023-01-05;23;31;24;15;136;
2023-01-06;79;12;96;65;72;

检索数据的循环:

start_date = datetime.datetime(2023,1,1,0,0)
end_date = datetime.datetime(2023,1,6,0,0)
    
sensor_data = pd.DataFrame()

while start_zeit < end_zeit:
    q = 'url' 
    r = requests.get(q)
    j = json.loads(r.text)
    sub_data = pd.DataFrame()
    if 'result' in j:    
        datetime = pd.to_datetime(np.array(j['result']['data'])[:,0])
        sensors = np.array(j['result']['sensors'])  
                        
        data = np.array(j['result']['data'])[:,1:]

        df_new = pd.DataFrame(data, index=datetime, columns=sensors)
        sub_data = pd.concat([sub_data, df_new])
    sensor_data = pd.concat([sensor_data, sub_data])
    start_date += timedelta(days=1)
6rqinv9w

6rqinv9w1#

如果2个数据框就够了,那么您可以简单地使用列名进行拆分:

df1 = df[['datetime', 'sensor_1', 'sensor_2', 'sensor_3']]
df2 = df[['datetime', 'new_sensor_8', 'new-sensor_9', 'sensor_10', 'sensor_11']]

注意使用的[[。
并使用.dropna()来丢失NaN行

相关问题