【问题标题】:How to process dataframe to extract values from its columns and create new columns?如何处理数据框以从其列中提取值并创建新列?
【发布时间】:2022-01-03 17:55:20
【问题描述】:

我有这个数据集在:https://gitlab.com/creativitylabb/dataset-test/-/raw/main/final_pagination.csv 处理后数据看起来像这样:

    TimeStamp   Source  Sensor  Value   LocationLat LocationLong    Measurement
TimeStamp                           
01.02.2021 07:00:00 01.02.2021 07:00:00 Waqi    pm10    16.0    45.716700   25.633300   µg/m3
01.02.2021 07:00:00 01.02.2021 07:00:00 Waqi    no2 4.0 45.716700   25.633300   µg/m3
01.02.2021 07:00:00 01.02.2021 07:00:00 Waqi    no2 2.3 45.716700   25.633300   µg/m3
01.02.2021 07:00:00 01.02.2021 07:00:00 Waqi    o3  19.8    45.716700   25.633300   µg/m3
01.02.2021 08:00:00 01.02.2021 08:00:00 Waqi    no2 28.5    45.659833   25.614488   µg/m3

我使用的处理方式:

from datetime import datetime

import pandas as pd

df = pd.read_csv('https://gitlab.com/creativitylabb/dataset-test/-/raw/main/final_pagination.csv')

df = df.drop(['id', 'index', 'type', 'score', 'Unnamed: 0'], 1)

df['TimeStamp'] = df['TimeStamp'].apply(lambda x: datetime.utcfromtimestamp(x / 1000).strftime('%d.%m.%Y %H:%M:%S'))

df = df.sort_values(by='TimeStamp').reset_index(drop=True)

print(df.head().to_string())

df.index = df['TimeStamp']

Sensor 值包含 pm10、pm2.5、co2 等传感器。值列包含传感器的测量值。如何将数据拆分为其他列,以便我可以有一个具有 pm10 值的列,另一个具有 pm2.5 值的列等等? (最好不要有所有其他列 Nan)

示例输出:

    TimeStamp   Source  pm10 pm25 LocationLat LocationLong    Measurement
TimeStamp                           
01.02.2021 07:00:00 01.02.2021 07:00:00 Waqi   16.0  20  45.716700   25.633300   µg/m3
01.02.2021 07:00:00 01.02.2021 07:00:00 Waqi   4.0 21 45.716700   25.633300   µg/m3
01.02.2021 07:00:00 01.02.2021 07:00:00 Waqi    2.3 20 45.716700   25.633300   µg/m3
01.02.2021 07:00:00 01.02.2021 07:00:00 Waqi    19.8 25   45.716700   25.633300   µg/m3
01.02.2021 08:00:00 01.02.2021 08:00:00 Waqi    28.5  24  45.659833   25.614488   µg/m3

【问题讨论】:

  • 能否展示一个包含预期输出的示例数据框?
  • 这能回答你的问题吗? How can I pivot a dataframe?
  • @richardec 我用示例输出更新了答案
  • @G.Anderson 但数据透视表为我提供了除一列之外的所有其他列的 NaN 值以及传感器值。有什么办法可以逃脱吗?
  • @IanKurtis 我有点困惑...在您的示例输出中,如果您保持其余行不变,那么当pm10 测量的数量与总行数不同?例如,在时间戳01.02.2021 07:00:00 期间只有一个pm10 测量值,因此如果您在该时间戳期间为pm10 创建一个新列,那么同一时间戳的其他行将用于列pm10 ?

标签: python pandas dataframe datetime


【解决方案1】:

从这个输出来看,NaN 有什么问题:

out = df.reset_index(drop=True) \
        .pivot_table(values='Value', columns='Sensor', aggfunc='mean',
                     index=['TimeStamp', 'Source', 'LocationLat', 
                            'LocationLong', 'Measurement'])

输出:

Sensor                                                                cho2    co2    no2    o3   pm1  pm10  pm25  so2
TimeStamp           Source      LocationLat LocationLong Measurement                                                 
01.02.2021 07:00:00 Waqi        45.716700   25.633300    µg/m3         NaN    NaN   3.15  19.8   NaN  16.0   NaN  NaN
01.02.2021 08:00:00 Waqi        45.716700   25.633300    µg/m3         NaN    NaN   2.85  21.3   NaN  16.0   NaN  NaN
                                45.634330   25.633872    µg/m3         NaN    NaN  18.30   NaN   NaN  29.0   NaN  NaN
                                45.649117   25.604136    µg/m3         NaN    NaN  13.15   3.6   NaN  16.0   NaN  NaN
                                45.654271   25.624061    µg/m3         NaN    NaN  11.00   NaN   NaN  18.0   NaN  NaN
...                                                                    ...    ...    ...   ...   ...   ...   ...  ...
31.10.2021 23:59:41 UradMonitor 45.641274   25.614817    µg/m3         NaN    NaN    NaN   NaN  11.0  20.0  18.0  NaN
31.10.2021 23:59:42 UradMonitor 45.651464   25.615426    µg/m3         7.0  591.0    NaN  20.0  25.0  35.0  31.0  NaN
31.10.2021 23:59:47 UradMonitor 45.559140   25.324771    µg/m3         NaN    NaN    NaN   NaN  12.0  18.0  17.0  NaN
31.10.2021 23:59:56 UradMonitor 45.657148   25.563752    µg/m3         7.0  681.0    NaN  20.0  20.0  28.0  25.0  NaN
31.10.2021 23:59:57 UradMonitor 45.661962   25.605432    µg/m3         NaN    NaN    NaN   NaN  11.0  25.0  21.0  NaN

[266450 rows x 8 columns]

【讨论】:

  • 我想使用这些数据进行预测。 NaN 值不会影响预测结果吗?或者我应该尝试为所有传感器设置一个每天的平均值?也许通过这种方式我可以摆脱一些 NaN 值...
  • 您的数据似乎是由pmX 值驱动的。也许您可以通过为其他列插值或前面填充最后一个已知值等来填充 nan。您还可以应用 ML 技术来填充值。
猜你喜欢
  • 2022-11-30
  • 1970-01-01
  • 1970-01-01
  • 2019-07-19
  • 1970-01-01
  • 1970-01-01
  • 2017-10-01
  • 1970-01-01
  • 2020-04-12
相关资源
最近更新 更多