Python + List: продажные цены рассчитаны правильно только для первого покупателя, для остальных они 0 - PullRequest
1 голос
/ 12 марта 2019

Я пытаюсь рассчитать отпускные цены по всем значениям строки [7] в формате csv для всех клиентов, чьи скидки в% хранятся в списке Y_pred. Для первого клиента он рассчитывает правильно. Для следующего клиента я инициализирую список, содержащий результирующую цену продажи с именем selling_price, равным 0. Затем он рассчитывает цены продажи для остальных клиентов как 0.

rows = csv.reader(open('sample_data_ml.csv', 'r'))
newrows = []
count = 0

Y_pred = np.asarray(Y_pred, dtype='float64')


for margin in Y_pred:
    selling_price = []
    print(margin)
    for row in rows:

        #print(row)
        if count == 0:
            #newrows.append(row)
            count = count+1
        else: 
            try:
                row[7] = float(row[7])
                #print(row[7]) 
            except ValueError as e:
                #print(row[7]) 
                row[7] = 0
            finally:                 
                print(row[7])
            sell = row[7] + margin*row[7]
            selling_price.append(sell)
    print(selling_price)
    print('-'*60) 

print('-'*60) 

Выход:

[array([312.81321038]), array([223.43800741]), array([1489.58671609]), array([49.34255997]), array([726.17352409]), array([2583.50196071]),  array([921.68178058]), array([335.15701112]), array([1885.25818755]), array([1070.64045219]), array([265.3326338]), array([451.53097331]), array([223.43800741]), array([1978.3573573]), array([512.04543365]), array([679.62393921]), array([223.43800741]), array([195.50825649]), array([96.82313655]), array([65.16941883]), array([242.05784136]), array([176.88842254]), array([512.04543365]), array([553.94006004]), array([256.02271683]), array([256.02271683]), array([269.98759229]), array([381.706596])]
------------------------------------------------------------
[0.07486867]
[]
------------------------------------------------------------
[0.12372819]
[]
------------------------------------------------------------
[0.11737926]
[]
------------------------------------------------------------
[0.11570468]
[]
------------------------------------------------------------
[0.09456172]
[]
------------------------------------------------------------
[0.09490446]
[]
------------------------------------------------------------
------------------------------------------------------------

Edit:

print(Y_pred)

Выход:

[[0.09528435]
 [0.07486867]
 [0.12372819]
 [0.11737926]
 [0.11570468]
 [0.09456172]
 [0.09490446]]


`print(row)` (printed one sample row)

выход:

['4311', '', 'Prawns-A Grade (31/40)', 'Smerkato Certified', '1', 'KGS', '410', '348.5']

1 Ответ

1 голос
/ 12 марта 2019

Вот виновник:

rows = csv.reader(open('sample_data_ml.csv', 'r'))
...
for margin in Y_pred:
    ...
    for row in rows:

csv.reader - это однопроходный итератор. После первой итерации внешнего цикла он достиг конца файла, и внутренний цикл будет немедленно прерван.

Два возможных способа здесь:

  • сбросить считыватель во внешнем цикле:

    ...
    for margin in Y_pred:
        ...
        rows = csv.reader(open('sample_data_ml.csv', 'r'))
        for row in rows:
    

    вы будете перечитывать файл csv для каждой внешней итерации

  • сохранить строки в списке:

    rows = list(csv.reader(open('sample_data_ml.csv', 'r')))
    ...
    for margin in Y_pred:
        ...
        for row in rows:
    

    вы читаете файл только один раз, но тратите немного памяти для списка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...