Я начинаю с Python. Я анализирую шины для каждой остановки вдоль маршрута автобуса. Для каждой остановки у меня есть список проходов. Количество проходов может быть различным для каждой остановки. Чтобы визуализировать данные, я хочу построить ящики на одной странице, чтобы вы могли наблюдать, как происходит маршрутизация шины по маршруту. Для этого я разработал код, который считывает данные шины из CSV-файла в словарь остановки с именем в качестве ключа и значениями в качестве объекта (я отслеживаю некоторые другие аспекты остановки, но не включены здесь для краткости). Беда, которую я испытываю, связана с коробкой. Я думал, что панды предоставят некоторую легкость для этого. Но у меня было много проблем с попыткой настроить фреймворк данных, потому что в моем словаре есть объекты. У вас могут быть другие идеи. Я упростил свой код до минимума, чтобы вы все еще могли следить за тем, что я сделал. В качестве побочного примечания я пытался научиться использовать классы, пока я работал над этим анализом. Вот почему вы видите кучу классов в моем коде. В моем полном коде, я имею дело с дублирующими транспортными средствами и выбросами в их собственных методах.Создание фрейма данных в пандах с одним столбцом индекса и вторым столбцом в виде списка различных размеров, создающих проблемы с boxplot
stops={}
stopNamesA=[]
headwaysA=[]
class Data:
def __init__(self):
self.depart = 0
self.vehicle = 0
class Stop:
def __init__(self):
self.vehicles = []
self.departs = []
self.headways=[]
self.stopName =""
def AddData(self, line):
fields = line.split(",")
self.stopName = fields[3]
self.vehicles.append(fields[0])
x = fields[4]
self.departs.append(datetime.datetime.strptime(x[:-1], "%m/%d/%y %I:%M:%S %p"))
def CalcHeadway(self):
for i in range(len(self.departs)-1):
dt = self.departs[i]
dt2 = self.departs[i+1]
self.headways.append(datetime.timedelta.total_seconds(dt2 - dt))
with open('data.csv','r') as f:
for line in f:
fields = line.split(",")
sid = str(fields[3])
if (fields[1] == 'X2' and fields[2] == 'WEST'):
if sid in stops.keys():
s = stops[sid]
else:
s = Stop()
stops[sid] = s
s.AddData(line)
for key, value in stops.items():
value.CalcHeadway()
Данные выглядит следующим образом (я снова усекается другие части):
5401 X2 WEST H ST NW + 7TH ST NW 10/3/16 7:58:48 AM
2835 X2 WEST H ST NW + 7TH ST NW 10/3/16 8:16:49 AM
2460 X2 WEST H ST NW + 7TH ST NW 10/3/16 8:20:12 AM
2460 X2 WEST H ST NW + 7TH ST NW 10/3/16 8:20:38 AM
2460 X2 WEST H ST NW + 7TH ST NW 10/3/16 8:20:57 AM
5404 X2 WEST I ST + 14TH ST 10/3/16 8:01:55 AM
2835 X2 WEST I ST + 14TH ST 10/3/16 8:24:01 AM
2853 X2 WEST I ST + 14TH ST 10/3/16 9:27:07 AM
5404 X2 WEST I ST + 14TH ST 10/3/16 9:45:43 AM
2835 X2 WEST I ST + 14TH ST 10/3/16 9:57:31 AM
2831 X2 WEST MINNESOTA AVE NE + BENNING RD NE 10/3/16 8:02:41 AM
2821 X2 WEST MINNESOTA AVE NE + BENNING RD NE 10/3/16 8:17:42 AM
5420 X2 WEST MINNESOTA AVE NE + BENNING RD NE 10/3/16 8:34:43 AM
2853 X2 WEST MINNESOTA AVE NE + BENNING RD NE 10/3/16 8:44:14 AM
5401 X2 WEST MINNESOTA AVE NE + BENNING RD NE 10/3/16 9:02:20 AM
@ ImportOffBeingErnestdf Большое спасибо за ваш ответ. Я попробовал приведенный ниже код на основе того, что вы предложили. Я получаю сообщение об ошибке IndexError: index out вне диапазона, когда я создаю график. = Pd.DataFrame (index = stopNamesA) для имени, прогона в zip (stopNamesA, headwaysA): df ['name'] = headway df .boxplot() –
@JohnV Что именно вы хотите сказать мне с этим фрагментом кода? Это полностью отличается от того, что я предложил в своем ответе. Это также совершенно неправильно. – ImportanceOfBeingErnest
Я пытаюсь создать цикл for вместо ввода каждого df [name] = ... как я думаю, вы сделали в своем ответе. Ваш график - именно то, что я хочу, но у меня есть тысячи остановок. –