我正在尝试按多个列对.csv文件进行排序,我正在使用熊猫,这是.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
失败,但是我不确定这是订购第4列(时间戳记)的正确方法
答案 0 :(得分:3)
您的csv以分号';'
分隔,默认情况下read_csv
的分隔符为','
,传递参数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