Как изменить pandas фрейм данных от времени к данным против времени к дате против данных - PullRequest
0 голосов
/ 05 февраля 2020

У меня большой набор данных о погоде с поминутными данными о температуре. Я хотел бы представить это в формате тепловой карты как время против даты против температуры вроде этого: Данные о температуре за пару лет

Я сделал это вручную в numpy для пока я не получил столько данных, что компьютер упал. Итак, я ищу способ сделать такой же вид печати с использованием pandas данных и графиков.

Структура данных выглядит следующим образом:

          TimeStamp  AirTemp  Pressure  RelHumidty  HeatIndex  Battery
0        1509159720    78.26     982.9        48.0    78.2600     3.11
1        1509159780    78.08     982.9        48.0    78.0800     3.11
2        1509159840    78.08     982.9        48.0    78.0800     3.11
3        1509159900    78.26     982.8        53.0    78.2600     3.11
4        1509159960    78.62     982.8        48.0    78.6200     3.11
5        1509160020    79.16     982.8        54.0    79.1600     3.11
6        1509160080    80.06     982.9        76.0    83.8179     3.12
7        1509160140    81.50     982.8        50.0    82.2393     3.12
8        1509160200    81.68     982.8        47.0    82.0224     3.12
...             ...      ...       ...         ...        ...      ...

И фрагмент кода I ' Сейчас я работаю с этим:

#create axis arrays
dayArray = np.linspace(0,1439,1440,dtype=int)
dateArray = airEndTimePlot - np.arange((airEndTimePlot-airStartTimePlot).days) * timedelta(days=1)

#load data from database
sql_Query = pd.read_sql_query('select * from AirObs', conn)

df = pd.DataFrame(sql_Query, columns=['TimeStamp','AirTemp','Pressure','RelHumidity','HeatIndex','Battery'])

# magic happens #
tempArray = df.AirTemp.<something>

fig = make_subplots(rows=8, cols=1)
fig.append_trace(go.Heatmap(
        z=tempArray,
        x=dateArray,
        y=dayArray,
        colorscale='Viridis'), row=1, col=1)

fig.show()

1 Ответ

0 голосов
/ 05 февраля 2020

Самый надежный способ сделать это - преобразовать ваше время unix в объекты Timestamp, следующий блок кода сделает это, может быть более быстрый способ применить это ко всему столбцу, но я не нашел никакого удобного упаковщики временных массивов

## creating the time column provided
import pandas as pd
df = pd.DataFrame();
df['TimeStamp'] = [1509159720 + (60*i) for i in range(10)]

## new code
df['datetimes'] = [pd.datetime.fromtimestamp(t) for t in df['TimeStamp']]
df['dates'] = [ dt.date() for dt in df['datetimes']]
df['times'] = [ dt.time() for dt in df['datetimes']]
print(df)

Выходные данные будут выглядеть как

   TimeStamp            datetimes       dates     times
0  1509159720 2017-10-27 20:02:00  2017-10-27  20:02:00
1  1509159780 2017-10-27 20:03:00  2017-10-27  20:03:00
2  1509159840 2017-10-27 20:04:00  2017-10-27  20:04:00
3  1509159900 2017-10-27 20:05:00  2017-10-27  20:05:00
4  1509159960 2017-10-27 20:06:00  2017-10-27  20:06:00
5  1509160020 2017-10-27 20:07:00  2017-10-27  20:07:00
6  1509160080 2017-10-27 20:08:00  2017-10-27  20:08:00
7  1509160140 2017-10-27 20:09:00  2017-10-27  20:09:00
8  1509160200 2017-10-27 20:10:00  2017-10-27  20:10:00
9  1509160260 2017-10-27 20:11:00  2017-10-27  20:11:00

И тогда вы можете создать свой график с

fig.append_trace(go.Heatmap(
    z=tempArray,
    x = df['date'],
    y = df['times'],
    colorscale='Viridis'), row=1, col=1)

дополнительной информацией о метках времени можно найти здесь : pd Временная метка ref

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...