У меня есть CSV-файл, как показано ниже, под названием «Data.csv». Данные.csv Я пытаюсь преобразовать его в python, чтобы он попадал в словарь, но, пытаясь понять это в течение 2 часов, я решил поместить их в отдельные списки. Я пробовал НЕСКОЛЬКО разных способов сделать это. Столбец Name импортируется отлично, и я получаю вывод, как и ожидалось, как- ['Royal Dutch Shell plc', 'HSBC Holdings plc', 'BP plc', 'AstraZeneca plc', 'BHP Group plc'........
Однако, как только я пытаюсь сделать это для отношения P/E, он выдает «SyntaxError: не может быть назначен оператору». До сих пор я пытался читать csv и повторять его, пробовал .tolist(), даже пробовал list(data.Name) и даже пытался использовать курсор для просмотра каждого отдельного фрагмента данных и помещения его в переменную ALL для тот же результат. Имя идет совершенно гладко, и как только оно достигает отношения P / E или любых числовых ячеек, оно взрывается.
Ниже приведены некоторые примеры кодов, которые я пробовал:
import csv
import pandas as pd
from pandas import *
import numpy as np
data=["Name","P/E Ratio","P/E/G Ratio","Earnings Per Share","BETA","Score"]
for i in range (0,len(data)):
cursor=(pd.read_csv("Data.csv", usecols=[(data[i])]))
data=read_csv("Data.csv")
Name=data["Name"].tolist()
P/E_Ratio=data["P/E Ratio"].tolist()
P/E/G_Ratio=data["P/E/G Ratio"].tolist()
Earnings_Per_Share=data["Earnings_Per_Share"].tolist()
BETA=data["BETA"].tolist()
Score=data["Score"].tolist()
print(Name,P/E_Ratio,P/E/G_Ratio,Earnings_Per_Share,BETA,Score)
data = pandas.read_csv("Data.csv",header=0)
Name=list(data.Name)
print(Name)
P/E_Ratio=list(data.P/ERatio)
Проверьте csv.DictReader






Несколько способов сделать это, некоторые с независимыми библиотеками (например, pandas).
Но я бы сделал что-то вроде этого:
import csv
filename = "Data.csv"
with open(filename, 'r') as data:
for line in csv.DictReader(data):
print(line)
При чтении файлов я предпочитаю придерживаться основных модулей Python вместо «неосновных» модулей Python (не знаю, какое у них будет точное имя). Ссылка здесь и документация
Вот как это сделать, с примером того, как выглядит файл CSV, чтобы вы могли сравнить его с вашим:
import pandas as pd
df = pd.DataFrame({
'Name':[chr(ord('A')+i) for i in range(26)],
'P/E Ratio':[(i+1) for i in range(26)],
'P/E/G Ratio':[i%4 - (10*i)%4 for i in range(26)],
'Earnings Per Share':[(i+1.5) %3 - (10*i)%7 for i in range(26)],
'BETA':[0.5 + (i / 10) % 1 for i in range(26)],
'Score':[0 for i in range(26)]})
print(df)
df.to_csv('so_sample.txt', index=False)
df2 = pd.read_csv('so_sample.txt')
print(df2)
dct = df2.to_dict(orient='list')
print(dct)
Пример df, который записывается в файл csv с помощью df.to_csv('so_sample.txt', index=False):
Name P/E Ratio P/E/G Ratio Earnings Per Share BETA Score
0 A 1 0 1.5 0.5 0
1 B 2 -1 -0.5 0.6 0
2 C 3 2 -5.5 0.7 0
3 D 4 1 -0.5 0.8 0
4 E 5 0 -2.5 0.9 0
5 F 6 -1 -0.5 1.0 0
6 G 7 2 -2.5 1.1 0
7 H 8 1 2.5 1.2 0
8 I 9 0 -2.5 1.3 0
9 J 10 -1 -4.5 1.4 0
10 K 11 2 0.5 0.5 0
11 L 12 1 -4.5 0.6 0
12 M 13 0 0.5 0.7 0
13 N 14 -1 -1.5 0.8 0
14 O 15 2 0.5 0.9 0
15 P 16 1 -1.5 1.0 0
16 Q 17 0 -3.5 1.1 0
17 R 18 -1 -1.5 1.2 0
18 S 19 2 -3.5 1.3 0
19 T 20 1 1.5 1.4 0
20 U 21 0 -3.5 0.5 0
21 V 22 -1 1.5 0.6 0
22 W 23 2 -0.5 0.7 0
23 X 24 1 -5.5 0.8 0
24 Y 25 0 -0.5 0.9 0
25 Z 26 -1 -2.5 1.0 0
Пример текстового файла so_sample.txt:
Name,P/E Ratio,P/E/G Ratio,Earnings Per Share,BETA,Score
A,1,0,1.5,0.5,0
B,2,-1,-0.5,0.6,0
C,3,2,-5.5,0.7,0
D,4,1,-0.5,0.8,0
E,5,0,-2.5,0.9,0
F,6,-1,-0.5,1.0,0
G,7,2,-2.5,1.1,0
H,8,1,2.5,1.2,0
I,9,0,-2.5,1.3,0
J,10,-1,-4.5,1.4,0
K,11,2,0.5,0.5,0
L,12,1,-4.5,0.6000000000000001,0
M,13,0,0.5,0.7,0
N,14,-1,-1.5,0.8,0
O,15,2,0.5,0.8999999999999999,0
P,16,1,-1.5,1.0,0
Q,17,0,-3.5,1.1,0
R,18,-1,-1.5,1.2,0
S,19,2,-3.5,1.3,0
T,20,1,1.5,1.4,0
U,21,0,-3.5,0.5,0
V,22,-1,1.5,0.6000000000000001,0
W,23,2,-0.5,0.7000000000000002,0
X,24,1,-5.5,0.7999999999999998,0
Y,25,0,-0.5,0.8999999999999999,0
Z,26,-1,-2.5,1.0,0
Вывод df2 после чтения кадра данных из файла csv с помощью pd.read_csv('so_sample.txt'):
Name P/E Ratio P/E/G Ratio Earnings Per Share BETA Score
0 A 1 0 1.5 0.5 0
1 B 2 -1 -0.5 0.6 0
2 C 3 2 -5.5 0.7 0
3 D 4 1 -0.5 0.8 0
4 E 5 0 -2.5 0.9 0
5 F 6 -1 -0.5 1.0 0
6 G 7 2 -2.5 1.1 0
7 H 8 1 2.5 1.2 0
8 I 9 0 -2.5 1.3 0
9 J 10 -1 -4.5 1.4 0
10 K 11 2 0.5 0.5 0
11 L 12 1 -4.5 0.6 0
12 M 13 0 0.5 0.7 0
13 N 14 -1 -1.5 0.8 0
14 O 15 2 0.5 0.9 0
15 P 16 1 -1.5 1.0 0
16 Q 17 0 -3.5 1.1 0
17 R 18 -1 -1.5 1.2 0
18 S 19 2 -3.5 1.3 0
19 T 20 1 1.5 1.4 0
20 U 21 0 -3.5 0.5 0
21 V 22 -1 1.5 0.6 0
22 W 23 2 -0.5 0.7 0
23 X 24 1 -5.5 0.8 0
24 Y 25 0 -0.5 0.9 0
25 Z 26 -1 -2.5 1.0 0
Выходной словарь, созданный с помощью df2.to_dict(orient='list'):
{'Name': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'], 'P/E Ratio': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26], 'P/E/G Ratio': [0, -1, 2, 1, 0, -1, 2, 1, 0, -1, 2, 1, 0, -1, 2, 1, 0, -1, 2, 1, 0, -1, 2, 1, 0, -1], 'Earnings Per Share': [1.5, -0.5, -5.5, -0.5, -2.5, -0.5, -2.5, 2.5, -2.5, -4.5, 0.5, -4.5, 0.5, -1.5, 0.5, -1.5, -3.5, -1.5, -3.5, 1.5, -3.5, 1.5, -0.5, -5.5, -0.5, -2.5], 'BETA': [0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4, 0.5, 0.6000000000000001, 0.7, 0.8, 0.8999999999999999, 1.0, 1.1, 1.2, 1.3, 1.4, 0.5, 0.6000000000000001, 0.7000000000000002, 0.7999999999999998, 0.8999999999999999, 1.0], 'Score': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]}
/не допускается как часть имени переменной в python, потому что это обозначает деление. Таким образом, присваиваниеP/E_ratio(и другим) похоже на присвоение результату оператора деления, откуда и возникает ошибка. Попробуйте другое имя переменной или, может быть, вы могли бы использоватьpd.DataFrame.to_dict, чтобы избежать всех проблем вместе? Документы: pandas.pydata.org/pandas-docs/stable/reference/api/…