python - 我正在尝试通过根据 2 列对其进行排序来组织我的 csv 数据
问题描述
我实际上是从以前回答过这个问题的时候提取了我的代码。但是,我的输出不是我预期的。我正在通过仅 2 列组织一个精炼的数据集。这是我正在使用的精炼数据集 sp:
ACC_TIME COUNTY_NAME
978 0:01 Harford
952 0:01 Anne Arundel
995 0:01 Prince Georges
1059 0:01 Carroll
941 0:01 Prince Georges
... ... ...
17535 9:12 Frederick
17536 9:12 Frederick
17251 9:12 Anne Arundel
17507 9:12 Dorchester
18636 9:12 Frederick
sp 只是 df,删除了特定的列。这是我的代码:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import csv
from operator import itemgetter
from datetime import datetime
import operator
df=pd.read_csv("2012CarCrashes.csv")
df.drop(['ACC_TIME_CODE','ROAD', 'INTERSECT_ROAD','DIST_FROM_INTERSECT', 'CITY_NAME',
'DIST_DIRECTION', 'COUNTY_CODE', 'VEHICLE_COUNT', 'PROP_DEST',
'COLLISION_WITH_2', 'CASE_NUMBER', 'BARRACK'], axis=1,inplace=True) #--> inplace=True means to update the df file
df["ACC_DATE"]= pd.to_datetime(df["ACC_DATE"]) #-->converts datatype to datetime
df = df.sort_values('ACC_TIME') #-->sorts according to time of accident
.
.
.
.
sp =df.drop(['ACC_DATE','DAY_OF_WEEK','INJURY','COLLISION_WITH_1'],axis=1)
#Next, how can I organize the data by county and time of accidents?
sp1 = sorted(sp, key=operator.itemgetter(0, 1))
print(sp1)
这是我不断得到的输出:
['ACC_TIME', 'COUNTY_NAME']
看,它只打印两列的标题,没有别的。
我可能做错了什么?
解决方案
使用 DataFrame 方法对 DataFrame 进行排序。 sorted()
不是 DataFrame 感知的,DataFrame 对象只是迭代它的列名:
>>> import pandas as pd
>>> df = pd.DataFrame([[2,3,4],[1,3,5],[2,1,7]],columns=['A','B','C'])
>>> df
A B C
0 2 3 4
1 1 3 5
2 2 1 7
>>> df = df.sort_values(['A','B'])
>>> df
A B C
1 1 3 5
2 2 1 7
0 2 3 4
推荐阅读
- performance - Haskell 上的 ICFPC 2006 任务太慢
- arduino - 诺基亚 5110 显示在 WeMos D1 中使用矩阵键盘 3x4 的键事件时不会改变
- python - gdal 已安装但在 Jupyter Notebook 中不起作用
- .net-core - Blazor DI 在 .razor 和商务类中的工作方式不同。为什么?
- postgresql - postgres 中的 CASE 查询不返回预期的输出
- javascript - 基于线交点在矩形内绘制多个多边形
- amazon-web-services - 在同一个应用服务器上运行prometheus好不好
- ruby - ActiveRecord::Base.connection.execute 和纯 sql 返回不同的结果
- python - Pandas - 选择以日期为键的多行和多列
- ssl - OpenShift + Istio 中的 mTLS(客户端证书)