我需要一个小帮助....
Csv文件示例:
ID, name, age, city1,city2,city3
1, Andy, 25, "Ann Arbor,NA","CA,NA","MS,NA"
2, Bella, 40, "Los Angeles,NA"
3, Cathy, 13, "Eureka,NA","NV,NA"
我的当前代码:
name=[]
age=[]
with open ('File_name','r') as f:
reader=DictReader(f)
for row in reader:
name.append(row['name'])#append all names
age.append(row['age'])
现在我需要打印城市。不确定只会住在3个城市。更新数据源时,可能会有更多的城市....所以我认为是创建一个变量循环。
方法i tried:我们的列是3…这里没有任何变化。
ID=2 #user requirement
name=[]
age=[]
cities=[]
with open ('File_name','r') as f:
reader=DictReader(f)
for row in reader:
if ID == row['ID']:
name.append(row['name'])#append all names
age.append(row['age'])
Def_Fil=len(row)-3
for i in range(Def_Fil):
city=city.append(row['city+str(i)']) #I dont aware how to declare the row name,i need to iterate manually...i can print name and age...but here depend number of cities i need to declare.
print(name,age,city)
但我面对的是"SyntaxError: cannot assign to operator"
期望输出:
当我打印ID 3的城市:["Eureka,NA","NV,NA"]
时Id 2:["Los Angeles,NA"]
ID 1:["Ann Arbor,NA","CA,NA","MS,NA"]
如果您不强制使用DictReader,您可以使用pandas
代替:
import pandas as pd
csv = pd.read_csv('data.csv', delimiter=',', skipinitialspace=True)
def getCities(ID):
# get the row with the given ID
row = csv[csv['ID'] == ID]
# get the cities columns (all columns but the first 3 'ID, name, age')
cities = row.iloc[:, 3:].values.tolist()[0]
# convert to a list of strings remove nan values
re = [str(x) for x in cities if str(x) != 'nan']
return re
print(getCities(3))
print(getCities(2))
print(getCities(1))
这给你:
['Eureka,NA', 'NV,NA']
['Los Angeles,NA']
['Ann Arbor,NA', 'CA,NA', 'MS,NA']
你的数据框架看起来像这样:
print(csv)
ID name age city1 city2 city3
0 1 Andy 25 Ann Arbor,NA CA,NA MS,NA
1 2 Bella 40 Los Angeles,NA NaN NaN
2 3 Cathy 13 Eureka,NA NV,NA NaN
如果要访问所有年龄或姓名:
print(csv['age'].values.tolist())
print(csv['name'].values.tolist())
[25, 40, 13]
['Andy', 'Bella', 'Cathy']
如果您想获得具有特定ID或Name的人的年龄
print(csv[csv['ID'] == 1]['age'].values.tolist()[0])
print(csv[csv['name'] == 'Bella']['age'].values.tolist()[0])
25
40