如何遍历csv文件中的行数,并根据行数追加值



我需要一个小帮助....

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

最新更新