Я изменяю свой ответ на ваш отзыв, воспроизводя более точную проблему.
С этим:
df_topex = pd.read_csv('datasets/TOPEX.dat',
sep='\s+', #multiple spaces as separator
index_col=0, #convert first column to index
names=["Time", "Anomaly"], #naming the headers
)
У вас есть что-то вроде этого, где столбец "Время" является index:
Time Anomaly
--------- ---------
1992.9595 2.0000
1992.9866 3.0000
1993.0138 4.0000
1993.0409 5.0000
1993.0681 6.0000
1993.0952 7.0000
Чтобы построить это, мы можем сделать следующее, как вы говорите, но просто к вашему сведению, есть проблема с этим методом (https://github.com/pandas-dev/pandas/issues/16529, но пока не большой сделка):
df_topex.reset_index(inplace=True)
tabulate_df(df_topex)
Это может быть безопаснее:
df_topex = df_topex.reset_index()
В любом случае, у нас есть «Время» в качестве столбца, готового для использования на графике (я отмечаю, что «Время» кажется мне не хватает формата времени):
Time Anomaly
------ --------- ---------
0 1992.9595 2.0000
1 1992.9866 3.0000
2 1993.0138 4.0000
3 1993.0409 5.0000
4 1993.0681 6.0000
5 1993.0952 7.0000
Чтобы построить это:
df_topex.plot(kind='scatter', x='Time', y='Anomaly', color='red')
Тогда давайте подумаем, следуя вашему последнему вопросу: хорошо ... У нас есть сюжет, но теперь мы не можем использовать преимущества использования «Time» в качестве индекса, не так ли?
Index оказывает существенное влияние на производительность при фильтрации миллионов строк. Может быть, вы заинтересованы в использовании столбца «Время» в качестве индекса, потому что у вас есть или предвидеть высокий объем. Можно построить миллионы точек (например, затенение данных), но это не очень распространено. Фильтрация любого DataFrame перед построением графика довольно распространена, и в этот момент индексирование столбца для фильтрации может действительно помочь, после этого обычно появляется график.
Таким образом, мы можем работать поэтапно с различными DataFrames или вообще делать следующее после операции импорта csv, то есть, сохраняя индекс, чтобы поиграть с ним и нанося на график столбец Time2 в любое время:
df_topex['Time2'] = df_topex.index
Таким образом, мы сохраняем «Время» в качестве индекса:
Time Anomaly Time2
--------- --------- ---------
1992.9595 2.0000 1992.9595
1992.9866 3.0000 1992.9866
1993.0138 4.0000 1993.0138
1993.0409 5.0000 1993.0409
1993.0681 6.0000 1993.0681
1993.0952 7.0000 1993.0952
Как воспользоваться индексированием? Хороший пост, в котором оценивается производительность при фильтрации по индексу: Какое влияние на производительность оказывают неуникальные индексы в pandas?
Короче говоря, вам интересно иметь уникальный индекс или, по крайней мере, отсортированный.
# Performance preference in index type to filtering tasks:
# 1) unique
# 2) if not unique, at least sorted (monotonic increase o decrease)
# 3) Worst combination: non-unique and unsorted.
# Let's check:
print ("Is unique?", df_topex.index.is_unique)
print ("Is is_monotonic increasing?", df_topex.index.is_monotonic_increasing)
print ("Is is_monotonic decreasing?", df_topex.index.is_monotonic_decreasing)
Из данных примера:
Is unique? True
Is is_monotonic increasing? True
Is is_monotonic decreasing? False
Если не отсортировано, вы можете выполнить задачу заказа по:
df_topex = df_topex.sort_index()
# Ready to go on filtering...
Надеюсь, это поможет.