2014-10-10 1 views
0

У меня есть файл csv (excel spreadsheet) столбца, насчитывающего примерно миллион номеров. Я хочу сделать гистограмму этих данных с частотой чисел по оси у и количествами на оси х. Я знаю, что matplotlib может отображать гистограмму, но моя главная проблема заключается в преобразовании csv-файла из строки в float, поскольку строка не может быть графически. Это то, что у меня есть:Как создать гистограмму из файла csv, содержащего один столбец чисел в python?

import matplotlib.pyplot as plt 
import csv 

with open('D1.csv', 'rb') as data: 
    rows = csv.reader(data, quoting = csv.QUOTE_NONNUMERIC) 
    floats = [[item for number, item in enumerate(row) if item and (1 <= number <= 12)] for row in rows] 
plt.hist(floats, bins=50) 
plt.title("histogram") 
plt.xlabel("value") 
plt.ylabel("frequency") 
plt.show() 
+0

http://www.sscce.org/ Каков результат, который вы получаете от того, что вы пробовали, и чем он отличается от того, что вы ожидаете ? –

+0

, так что у вас есть только номера в файле? Можете ли вы привести пример своего ввода, так как ваш код, похоже, не соответствует вашему описанию? –

+0

вы пытаетесь 'float (item)' –

ответ

4

Вы можете сделать это в одной строке с pandas:

import pandas as pd 

pd.read_csv('D1.csv', quoting=2)['column_you_want'].hist(bins=50) 
+0

Если это первый столбец в документе excel, что мне нужно положить в колонку, которую вы хотите? –

+0

Я пробовал «A», «1» и «0», но это ошибка ключевого слова. Большое вам спасибо за упрощение этого, кстати. Я новичок в программировании в целом, как вы, вероятно, можете сказать, что это помогает много –

+0

@ DanielHodgkins, Try 'df = pd.read_csv ('D1.csv', quoting = 2); print df.head() '. Таким образом вы увидите, что такое имя столбца. Чтобы помочь вам лучше вставить первые строки вашего CSV в свой вопрос. – elyase

2

Хорошо я наконец-то работать с заголовками, титрами и т.д.

import matplotlib.pyplot as plt 
import pandas as pd 
data = pd.read_csv('D1.csv', quoting=2) 
data.hist(bins=50) 
plt.xlim([0,115000]) 
plt.title("Data") 
plt.xlabel("Value") 
plt.ylabel("Frequency") 
plt.show() 

Моя первая проблема заключалась в том, что matplotlib необходим для фактического отображения графика. Кроме того, мне нужно, чтобы установить действие

pd.read_csv('D1.csv', quoting=2) 

к данным, так что я мог бы построить гистограмму этого действия с

data.hist 

Спасибо всем за помощь.

0

панды read_csv является очень мощным, но если ваш файл CSV является простым (без заголовков или NaNs или комментариев) вам не нужны панды, как вы можете использовать Numpy:

import numpy as np 
import matplotlib.pyplot as plt 
data = np.loadtxt('D1.csv') 
plt.hist(data, normed=True, bins='auto') 

(На самом деле loadtxt может дело с некоторыми заголовками и комментариями, но read_csv более универсален)

Смежные вопросы