Я пытаюсь сортировать 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)
Ваш 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
io.StringIO(txt)
в read_csv. отлично !!