Примечание: я очень новичок в Python, поэтому, пожалуйста, потерпите меня!
edit: я исправил ошибку, но мне нужна помощь с моим вопросом ниже!
Мой вопрос:
1) Если я хочу поместить минимальное значение (я) и наиболее распространенное слово / число в таблицу, как можноЯ индексирую минимальное значение / наиболее распространенное слово, извлекаю его и помещаю в правильную позицию на моем столе?
Описание
Следующий код должен транспонироватьданный вложенный список, A, используя функцию
def rows2cols(A):
,
, затем проходит по этому списку, и для каждого столбца я проверяю, имеет ли он числовые значения или не использует
def isnumericlist(A):
.
Если в списке есть числовые значения, я преобразую строки в числа с плавающей точкой и нахожу минимальное значение и наиболее распространенное слово / число из этого списка.
Код следующий:
A = [['OrderDate', 'Region', 'Rep', 'Item', 'Units', 'Unit Price'],['4-Jul-2014', 'East', 'Richard', 'Pen Set', '62', '4.99'], ['12-Jul-2014', 'East', 'Nick', 'Binder', '29', '1.99'], ['21-Jul-2014', 'Central', 'Morgan', 'Pen Set', '55', '12.49'], ['29-Jul-2014', 'East', 'Susan', 'Binder', '81', '19.99'],['7-Aug-2014', 'Central', 'Matthew', 'Pen Set', '42', '23.95'], ['15-Aug-2014', 'East', 'Richard', 'Pencil', '35', '4.99'], ['24-Aug-2014', 'West', 'James', 'Desk', '3', '275']]
minVal = []
maxVal = []
hist = []
average = []
stanDev = []
headers = A[0] #this sets the variable "headers" as the first row
rows = A[1:] #skips the first row
def rows2cols(A):
if len(A) == 0:
return [] #this covers the base case of having an empty csv file
res = [[] for x in headers] # would create a list of empty lists
for line in A:
for col in range(len(line)):
res[col].append(line[col])
return res
def convertstringtofloats(A):
res = []
for x in A:
res.append(float(x))
return res
def isnumericlist(A):
for x in A:
try:
numeric = float(x)
except:
return False
return True
def getMin(A):
res = B[0] #first column AFTER you transpose the nested list
for x in A:
if x < res:
res = x
return res
def most_common(A):
counts = {}
for x in A:
counts[tuple(x)] = counts.get(tuple(x), 0) + 1
max = -1
maxKey = ""
for key,value in counts.items():
if max < value:
max = value
maxKey = key
return maxKey
def notnumeric(A):
return "n/a"
cols = rows2cols(rows)
for col in range(len(headers)):
if isnumericlist(cols[col]):
B = convertstringtofloats(cols[col])
minVal.append(getMin(B))
maxVal.append(getMax(B))
average.append(getAvg(B))
stanDev.append(getSD(B))
else:
notnumeric(col)
mode.append(most_common(cols[col]))
tablevalues = [minVal, maxVal, average, stanDev, mode]
Ниже приведен мой код для создания таблицы вместе с таблицей примеров того, как бы я хотел, чтобы результат был!
def print_table(table):
longest_cols = [
(max([len(str(row[i])) for row in table]) + 0) for i in range(len(table[0]))
]
row_format = "|".join([" {:>" + str(longest_col) + "} " for longest_col in longest_cols])
first = True
for row in table:
print(row_format.format(*row))
if first:
print((sum(longest_cols) + (len(table[0]) - 0) * 3) * "-")
first = False
table = [
["Columns:", "Min", "Max", "Avg", "Std. Dev.", "Most Common Word"],
["OrderDate", "n/a", "n/a", "n/a", "n/a", "John"],
["Region", 3.3, 6.29, 4.888, 1.333, 4.911],
["Rep", 1.3, 3.2, 1.888, 0.333, 1.9],
["Item", 1.3, 3.2, 1.888, 0.333, 1.9],
["Units","n/a", "n/a", "n/a", "n/a", "John"],
["Unit Price","n/a", "n/a", "n/a", "n/a", "John"]
]
print_table(table)