python - ошибка при сортировке csv по столбцу

1

Я пытаюсь сортировать CSV файл по нескольким столбцам, я использую pandas, это файл.csv:

col1;col2;col3;col4;col5
6943000;11;1.0;2016-01-01 15:30:31;?
6943000;19;1.0;2016-01-01 15:38:07;?
6943000;13;1.0;2016-01-01 15:54:27;?
6942992;10;1.0;2016-01-01 00:52:59;?
6942993;8;1.0;2016-01-01 12:08:36;?
.....

Я должен заказать его с помощью col1 и col4, это код:

import pandas as pd
df = pd.read_csv('input.csv')
df = df.sort_values(by=['col1', 'col4'])
df.to_csv('sorted.csv', index=False)

но я получаю эту ошибку:

Traceback (most recent call last):   File "C:\Python\Scripts\provacsv.py", line 3, in <module>
    df = df.sort_values(by=['col1', 'col4'])   File "C:\Python\lib\site-packages\pandas\core\frame.py", line 4411, in sort_values
    stacklevel=stacklevel)   File "C:\Python\lib\site-packages\pandas\core\generic.py", line 1379, in
_get_label_or_level_values
    raise KeyError(key) KeyError: 'col1'

Поэтому он не работает для col1, но я не уверен, что это правильный способ заказать col 4 (timestamps)

Теги:
pandas

1 ответ

3
Лучший ответ

Ваш csv разделен запятой ';' , по умолчанию разделитель для read_csv равен ',', pass param sep=';' :

In[21]:
import io
t="""col1;col2;col3;col4;col5
6943000;11;1.0;2016-01-01 15:30:31;?
6943000;19;1.0;2016-01-01 15:38:07;?
6943000;13;1.0;2016-01-01 15:54:27;?
6942992;10;1.0;2016-01-01 00:52:59;?
6942993;8;1.0;2016-01-01 12:08:36;?"""
df = pd.read_csv(io.StringIO(t), sep=';')
df = df.sort_values(by=['col1', 'col4'])
df

[21]: 
      col1  col2  col3                 col4 col5
3  6942992    10   1.0  2016-01-01 00:52:59    ?
4  6942993     8   1.0  2016-01-01 12:08:36    ?
0  6943000    11   1.0  2016-01-01 15:30:31    ?
1  6943000    19   1.0  2016-01-01 15:38:07    ?
2  6943000    13   1.0  2016-01-01 15:54:27    ?

Также обратите внимание, что ваши временные метки интерпретируются как строки, если вы хотите datetime dtype затем попросите pandas проанализировать их:

In[26]:

import io
t="""col1;col2;col3;col4;col5
6943000;11;1.0;2016-01-01 15:30:31;?
6943000;19;1.0;2016-01-01 15:38:07;?
6943000;13;1.0;2016-01-01 15:54:27;?
6942992;10;1.0;2016-01-01 00:52:59;?
6942993;8;1.0;2016-01-01 12:08:36;?"""
df = pd.read_csv(io.StringIO(t), sep=';', parse_dates=['col4'])
df = df.sort_values(by=['col1', 'col4'])
df.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 5 entries, 3 to 2
Data columns (total 5 columns):
col1    5 non-null int64
col2    5 non-null int64
col3    5 non-null float64
col4    5 non-null datetime64[ns]
col5    5 non-null object
dtypes: datetime64[ns](1), float64(1), int64(2), object(1)
memory usage: 240.0+ bytes
  • 0
    О, мы можем предоставить io.StringIO(txt) в read_csv. отлично !!
  • 2
    @ PiyushS.Wanare Я делаю это только для имитации текстового файла в памяти

Ещё вопросы

Сообщество Overcoder
Наверх
Меню