Quelqu'un pourrait-il m'aider à résoudre le problème suivant. Je l'ai essayé moi-même et j'ai joint la solution aussi. J'ai utilisé la liste 2-d, mais je veux une solution différente sans liste 2-d, ce qui devrait être plus pythonique.obtenir la valeur maximale de chaque colonne du fichier csv
pl suggérer moi l'un de vous avez une autre façon de le faire.
Q) Envisager les prix des actions d'un nombre N de sociétés donné pour chaque mois depuis 1990 dans un fichier CSV. Le format du fichier est comme ci-dessous avec la première ligne comme en-tête.
Année, Mois, Société A, Société B, C Company, ............. Société N
1990, Jan, 10, 15, 20, ... ......., 50
1990, février, 10, 15, 20, .........., 50
.
.
.
.
2013, sept 50, 10, 15 ............ 500
La solution doit être dans ce format. a) Liste pour chaque année et mois de société où le cours de l'action était le plus élevé.
Voici ma réponse en utilisant la liste 2-d.
def generate_list(file_path):
'''
return list of list's containing file data.'''
data_list=None #local variable
try:
file_obj = open(file_path,'r')
try:
gen = (line.split(',') for line in file_obj) #generator, to generate one line each time until EOF (End of File)
for j,line in enumerate(gen):
if not data_list:
#if dl is None then create list containing n empty lists, where n will be number of columns.
data_list = [[] for i in range(len(line))]
if line[-1].find('\n'):
line[-1] = line[-1][:-1] #to remove last list element's '\n' character
#loop to convert numbers from string to float, and leave others as strings only
for i,l in enumerate(line):
if i >=2 and j >= 1:
data_list[i].append(float(l))
else:
data_list[i].append(l)
except IOError, io_except:
print io_except
finally:
file_obj.close()
except IOError, io_exception:
print io_exception
return data_list
def generate_result(file_path):
'''
return list of tuples containing (max price, year, month,
company name).
'''
data_list = generate_list(file_path)
re=[] #list to store results in tuple formet as follow [(max_price, year, month, company_name), ....]
if data_list:
for i,d in enumerate(data_list):
if i >= 2:
m = max(data_list[i][1:]) #max_price for the company
idx = data_list[i].index(m) #getting index of max_price in the list
yr = data_list[0][idx] #getting year by using index of max_price in list
mon = data_list[1][idx] #getting month by using index of max_price in list
com = data_list[i][0] #getting company_name
re.append((m,yr,mon,com))
return re
if __name__ == '__main__':
file_path = 'C:/Document and Settings/RajeshT/Desktop/nothing/imp/New Folder/tst.csv'
re = generate_result(file_path)
print 'result ', re
I have tried to solve it with generator also, but in that case it was giving result for only one company i.e. only one column.
p = 'filepath.csv'
f = open(p,'r')
head = f.readline()
gen = ((float(line.split(',')[n]), line.split(',',2)[0:2], head.split(',')[n]) for n in range(2,len(head.split(','))) for i,line in enumerate(f))
x = max((i for i in gen),key=lambda x:x[0])
print x
vous pouvez prendre les données d'entrée fournies ci-dessous qui est au format csv ..
year,month,company 1,company 2,company 3,company 4,company 5
1990,jan,201,245,243,179,133
1990,feb,228,123,124,121,180
1990,march,63,13,158,88,79
1990,april,234,68,187,67,135
1990,may,109,128,46,185,236
1990,june,53,36,202,73,210
1990,july,194,38,48,207,72
1990,august,147,116,149,93,114
1990,september,51,215,15,38,46
1990,october,16,200,115,205,118
1990,november,241,86,58,183,100
1990,december,175,97,143,77,84
1991,jan,190,68,236,202,19
1991,feb,39,209,133,221,161
1991,march,246,81,38,100,122
1991,april,37,137,106,138,26
1991,may,147,48,182,235,47
1991,june,57,20,156,38,245
1991,july,165,153,145,70,157
1991,august,154,16,162,32,21
1991,september,64,160,55,220,138
1991,october,162,72,162,222,179
1991,november,215,207,37,176,30
1991,december,106,153,31,247,69
résultat attendu suit.
[(246.0, '1991', 'march', 'company 1'),
(245.0, '1990', 'jan', 'company 2'),
(243.0, '1990', 'jan', 'company 3'),
(247.0, '1991', 'december', 'company 4'),
(245.0, '1991', 'june', 'company 5')]
Merci à l'avance ...
est numpy ou une option pandas? – beroe
tout ce que vous pensez est plus pythonique et avec une utilisation maximale des fonctions de bibliothèque standard seulement. Pl pas de tiers ... –
OK, pandas et numpy sont des bibliothèques que vous devez importer, donc je suppose que vous appelez ce tiers, mais ils sont parfaits pour ce genre d'application. Mais vous pouvez le faire avec des approches standard aussi ... – beroe