Ранжирование значений сложных CSV-файлов (с использованием Python, панды) - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть большой CSV-файл с датами, установленными в качестве индекса (например, 2018-10-31 12:00) и несколькими столбцами, 1 столбец «Ориентация», списки IDS комнаты (жало, например, N1001) и другой столбец «значения» спискичисловые значения (с плавающей точкой).То, что я хотел бы сделать, это получить среднее значение за 1 день каждой из комнат, чтобы составить рейтинг.Это то, что у меня есть:

import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt

df = pd.read_csv('file.csv', index_col=0, parse_dates=['TS_TIMESTAMP'])
df.set_index('TS_TIMESTAMP', inplace=True)
#only datetimes between 07:00 and 18:00
df1 = df.between_time('07:00', '18:00')
c = df1.pivot(columns='Orientation', values='Quality_Value')
#mean of ppm per room
c.loc['mean'] = c.mean()

#select row 'mean' to make ranking
rk = c.ix['mean']

#make series into frame
data = pd.DataFrame({'Orientation':rk.index, 'Mean_Value':rk.values})
ranked = data.sort_values('Mean_Value', ascending=True)
# Draw plot
fig, ax = plt.subplots(figsize=(16,10), dpi= 80)
ax.vlines(x=ranked.Orientation, ymin=0, ymax=ranked.Mean_Value, color='firebrick', alpha=0.7, linewidth=2)
ax.scatter(x=ranked.Orientation, y=ranked.Mean_Value, s=20, color='firebrick', alpha=0.7)

# Title, Label, Ticks and Ylim
ax.set_title('ppm ranking D18', fontdict={'size':22})
ax.set_ylabel('CO2 Concentration in ppm')
ax.set_xticks(ranked.Orientation)
ax.set_xticklabels(ranked.Orientation.str.upper(), rotation=30, fontdict={'horizontalalignment': 'right', 'size':12})
ax.set_ylim(0, 1400)

# Annotate
for row in ranked.itertuples():
    ax.text(row.Orientation, row.Mean_Value, s=round(row.Mean_Value, 1), horizontalalignment= 'center', verticalalignment='baseline', fontsize=9)

plt.show()

То, что я получаю, выглядит следующим образом: График ранжирования

Проблема в том, что я получаю предупреждение Deprecation: .ix isосуждается.а также среднее значение рассчитывается для всего периода времени (1 месяц), но я хочу иметь средние значения в день.

Любая помощь / совет очень ценится.Спасибо.

Это пример того, как создается CSV (pd.read_csv):

TS_TIMESTAMP TS_ID Orientation AirQuality_Value
2018-10-13 07:45:00 1284.0 NR1022 535.0000000000001
2018-10-14 07:15:00 1329.0 ER1051 777.0
2018-10-25 22:15:00 1260.0 WR1032 794.0
2018-10-17 06:00:00 1321.0 ER1052 836.0
2018-10-09 04:15:00 1382.0 ER1067 922.0

Скопируйте это в буфер обмена и прочитайте его с помощью:

df = pd.read_clipboard(header=0, index_col=[0, 1])
df = df.drop('AirQuality_Value', axis=1)
df.columns = ['TS_ID', 'Orientation',  'AirQuality_Value']
...