从CSV文件仅打印/绘制某些特定工作站的特定列

时间:2018-12-30 20:54:07

标签: python pandas csv matplotlib

我创建了一个充电模拟程序,该程序模拟到达不同站点进行充电的不同电动汽车。

模拟完成后,该程序将为充电站创建CSV文件,该文件包含每小时统计信息和每天统计信息,首先,每小时CSV统计信息对我来说很重要。

我想为不同的站点绘制queue_length_per_hour(每小时从0到24,有多少辆汽车在排队等候)。

但是事实是我不想包含所有站点,因为它们太多了,因此我认为仅3个站点就足够了。

我应该选择哪个3个电台?我选择了3个车站,具体根据它们当中哪一个车站白天访问量最多的汽车(我可以在第24小时看到),

您可以在代码中看到,我使用了pandas的过滤方法,因此我可以根据CSV文件中第24小时访问量最多的汽车来挑选前3个站点。

现在我拥有前三名,并且我想绘制整个列cars_in_queue_per_hour,不仅是第24小时,而且是从第0小时一直到下。

from time import sleep
import pandas as pd
import csv
import matplotlib.pyplot as plt


file_to_read = pd.read_csv('results_per_hour/hotspot_districts_results_from_simulation.csv', sep=";",encoding = "ISO-8859-1")


read_columns_of_file = file_to_read.columns

read_description = file_to_read.describe()


visited_cars_at_hour_24 = file_to_read["hour"] == 24

filtered = file_to_read.where(visited_cars_at_hour_24, inplace = True, axis=0)

top_three = (file_to_read.nlargest(3, 'visited_cars')) 
# This pick top 3 station based on how many visited cars they had during the day

#print("Top Three stations based on amount of visisted cars:\n{}".format(top_three))

#print(type(top_three))
top_one_station = (top_three.iloc[0]) # HOW CAN I PLOT QUEUE_LENGTH_PER_HOUR COLUMN FROM THIS STATION TO A GRAPH?
top_two_station = (top_three.iloc[1]) # HOW CAN I ALSO PLOT QUEUE_LENGTH_PER_HOUR COLUMN FROM THIS STATION TO A GRAPH?
top_three_station = (top_three.iloc[2]) # AND ALSO THIS?
#print(top_one_station)

#print(file_to_read.where(file_to_read["name"] == "Vushtrri"))

#for row_index, row in top_three.iterrows():
#  print(row)
#  print(row_index)
#  print(file_to_read.where(file_to_read["name"] == row["name"]))
#  print(file_to_read.where(file_to_read["name"] == row["name"]).columns)


xlabel = []
for hour in range(0,25):
    xlabel.append(hour)
ylabel = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] # how to append queue length per hour for the top 3 stations here?

plt.plot(xlabel,ylabel)
plt.show()

此代码链接以及CSV文件也可以在此repl.it链接中找到:https://repl.it/@raxor2k/almost-done

1 个答案:

答案 0 :(得分:1)

我真的很喜欢seaborn软件包制作这种绘图,所以我会使用

import seaborn as sns
df_2 = file_to_read[file_to_read['name'].isin(top_three['name'])]
sns.factorplot(x='hour', y='cars_in_queue_per_hour', data=df_2, hue='name')

您已经选择了前三个名称,所以唯一相关的部分是使用pd.isin选择名称与前三个名称相匹配的数据行,然后让seaborn进行绘制。

>

enter image description here

要执行此操作,请确保通过删除适当的位置来更改一行代码:

filtered = file_to_read.where(visited_cars_at_hour_24, axis=0)
top_three = (filtered.nlargest(3, 'visited_cars'))

这将保留原始数据框完整以使用其中的所有数据。如果使用就地,则无法将其分配回来-该操作就地执行并返回None

我清理了剧情不需要的代码行,因此可以复制完整的代码

import seaborn as sns
top_three = file_to_read[file_to_read['hour'] == 24].nlargest(3, 'visited_cars')
df_2 = file_to_read[file_to_read['name'].isin(top_three['name'])]
sns.factorplot(x='hour', y='cars_in_queue_per_hour', data=df_2, hue='name')