在Python上打印CSV行/列

在Python上打印CSV行/列,python,csv,matplotlib,bar-chart,reader,Python,Csv,Matplotlib,Bar Chart,Reader,我有一个csv文件,我正在尝试读取。excel/csv表格中的第一行是列标题“一月|二月|三月…”等。然后在每个列标题下是浮动数据。我有以下代码: filename ='Data.csv' with open(filename) as f: csvreader = csv.reader(f) header_row = next(csvreader) Jan, Feb = [], [] .... #(and so on) Mar = [] Apr = [] May = [] Jun = [] Ju

我有一个csv文件,我正在尝试读取。excel/csv表格中的第一行是列标题“一月|二月|三月…”等。然后在每个列标题下是浮动数据。我有以下代码:

filename ='Data.csv'
with open(filename) as f:
csvreader = csv.reader(f)
header_row = next(csvreader)
Jan, Feb = [], [] .... #(and so on)
Mar = []
Apr = []
May = []
Jun = []
Jul = []
Aug = []
Sep = []    
Oct = []
Nov = []
Dec = []
for row in csvreader:
    Jan.append(float(row[1]))
    Feb.append(float(row[2]))
    Mar.append(float(row[3]))
    Apr.append(float(row[4]))
    May.append(float(row[5]))
    Jun.append(float(row[6]))
    Jul.append(float(row[7]))
    Aug.append(float(row[8]))
    Sep.append(float(row[9]))
    Oct.append(float(row[10]))
    Nov.append(float(row[11]))
    Dec.append(float(row[12]))

如何压缩此代码,以便轻松绘制x轴上的月份和y轴上的数据的条形图?

对于我来说,最简单的方法是使用pandas库,因为它提供了直接从数据框绘制的功能

import pandas as pd

df = pd.read_csv('Data.csv', sep='|') # or your sep in file
...
df.plot.bar()
编辑: 如果您在excel中有数据,则无需像csv文件那样提供sep。 要读取excel文件,只需执行以下操作:

df = pd.read_excel('Data.xlsx', sheetname='name')
df.plot.bar()

一些例子:

df2 = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd'])
df2.plot.bar()
barplot的文件:

对我来说,最简单的方法是使用pandas库,因为它直接从数据帧提供绘图功能

import pandas as pd

df = pd.read_csv('Data.csv', sep='|') # or your sep in file
...
df.plot.bar()
编辑: 如果您在excel中有数据,则无需像csv文件那样提供sep。 要读取excel文件,只需执行以下操作:

df = pd.read_excel('Data.xlsx', sheetname='name')
df.plot.bar()

一些例子:

df2 = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd'])
df2.plot.bar()
barplot的文件: 伪造数据/设置:

import csv, io
from pprint import pprint
from matplotlib import pyplot as plt

s = '''a, b, c
1, 2, 3
4, 5, 6
7, 8, 9'''
csv_file = io.StringIO(s)
reader = csv.reader(csv_file)
csv.reader对象返回行

header = next(reader)
data_rows = list(reader)

>>> pprint(data_rows, width = 20)
[['1', ' 2', ' 3'],
 ['4', ' 5', ' 6'],
 ['7', ' 8', ' 9']]
>>>
可以使用将数据转换为列

data_cols = zip(*data_rows)

>>> pprint(list(data_cols), width = 20)
[('1', '4', '7'),
 (' 2', ' 5', ' 8'),
 (' 3', ' 6', ' 9')]
>>> 
您可以再次使用zip将列与其标题关联,并向绘图中添加图例

for month, data in zip(header, data_cols):
    plt.plot(data, label = month)
plt.legend()
plt.show()
plt.close()


如果您只想将数据放入容器并使列与其标题关联,请将其放入dict中:

data = {}
for month, column in zip(header, data_cols):
    data[month] = column

>>> data
{'a': ('1', '4', '7'), ' b': (' 2', ' 5', ' 8'), ' c': (' 3', ' 6', ' 9')}
>>>
伪造数据/设置:

import csv, io
from pprint import pprint
from matplotlib import pyplot as plt

s = '''a, b, c
1, 2, 3
4, 5, 6
7, 8, 9'''
csv_file = io.StringIO(s)
reader = csv.reader(csv_file)
csv.reader对象返回行

header = next(reader)
data_rows = list(reader)

>>> pprint(data_rows, width = 20)
[['1', ' 2', ' 3'],
 ['4', ' 5', ' 6'],
 ['7', ' 8', ' 9']]
>>>
可以使用将数据转换为列

data_cols = zip(*data_rows)

>>> pprint(list(data_cols), width = 20)
[('1', '4', '7'),
 (' 2', ' 5', ' 8'),
 (' 3', ' 6', ' 9')]
>>> 
您可以再次使用zip将列与其标题关联,并向绘图中添加图例

for month, data in zip(header, data_cols):
    plt.plot(data, label = month)
plt.legend()
plt.show()
plt.close()


如果您只想将数据放入容器并使列与其标题关联,请将其放入dict中:

data = {}
for month, column in zip(header, data_cols):
    data[month] = column

>>> data
{'a': ('1', '4', '7'), ' b': (' 2', ' 5', ' 8'), ' c': (' 3', ' 6', ' 9')}
>>>

首先,您可以要求csv阅读器解析标题。DictReader可以帮助您解决另一个问题。首先,您可以要求csv阅读器解析标题。DictReader可以帮助您解决另一个问题。
最好的方法。
似乎是主观的,为什么它比使用
csv
模块更好?对不起,我编辑了主观部分…,因为您使用一个包从数据帧界面读取文件、清理文件和打印文件。我仍在学习Python,但到目前为止我并不喜欢熊猫。“sep”命令的作用是什么。我在excel中的文件,我使用|只是为了显示月份在不同的列中。@Jonathon sep用于csv,要读取excel,您不需要它。相反,您使用pd.read\u excel()-请参见编辑您是对的。在这种情况下,熊猫似乎更容易生存。读入数据后,如何将列分离为x、y变量,以便绘制它们?
最佳方法..
似乎是主观的,为什么它比使用
csv
模块更好?抱歉,我编辑了主观部分…,因为您使用一个包来读取文件,从dataframe界面清理文件和绘图文件我仍在学习Python,但到目前为止我并不喜欢熊猫。“sep”命令的作用是什么。我在excel中的文件,我使用|只是为了显示月份在不同的列中。@Jonathon sep用于csv,要读取excel,您不需要它。相反,您使用pd.read\u excel()-请参见编辑您是对的。在这种情况下,熊猫似乎更容易生存。读入数据后,如何将列隔离为x、y变量,以便绘制它们?