Python 使用嵌套列表创建的 CSV 导入
Python CSV import with nested list creation
我正在尝试将 .csv 导入 Python。我已经阅读了大量文档,但对于我的一生,我无法弄清楚如何执行以下操作。
CSV格式如下
NYC,22,55
BOSTON,39,22
我正在尝试生成以下内容:{NYC = [22,55], BOSTON = [39,22]} 这样我就可以在每个循环中调用 i[0] 和 i[1]多变的。
我试过了
import csv
input_file = csv.DictReader(open("C:\Python\Sandbox\longlat.csv"))
for row in input_file:
print(row)
它打印我的变量,但我不知道在城市名称中嵌套两个数值并生成我希望获得的列表。
感谢您的帮助,抱歉我的菜鸟问题-
使用词典理解:
import csv
with open(r'C:\Python\Sandbox\longlat.csv', mode='r') as csvfile:
csvread = csv.reader(csvfile)
result = {k: [int(c) for c in cs] for k, *cs in csvread}
这适用于 python-3.x,并在我的机器上生成:
>>> result
{'NYC': [22, 55], 'BOSTON': [39, 22]}
它也适用于任意数量的列。
如果您使用 python-2.7,您可以在序列解包上使用索引和切片:
import csv
with open(r'C:\Python\Sandbox\longlat.csv', mode='r') as csvfile:
csvread = csv.reader(csvfile)
result = {<b>row[0]</b>: [int(c) for c in <b>row[1:]</b>] for <b>row</b> in csvread}
这是一个提示。尝试熟悉 str.split(x)
函数
strVar = "NYC,22,55"
listVar = strVar.split(',') # ["NYC", "22", "55"]
cityVar = listVar[0] # "NYC"
restVar = listVar[1:]; # ["22", "55"]
# If you want to convert `restVar` into integers
restVar = map(int, restVar)
如果您不熟悉 python 推导式,可以使用以下使用 for 循环的代码:
import csv
with open('C:\Python\Sandbox\longlat.csv', 'r') as f:
reader = csv.reader(f)
result = {}
for row in reader:
result[row[0]] = row[1:]
如果您希望数字是字符串,则前面的代码有效,如果您希望它们是数字,请使用:
import csv
with open('C:\Python\Sandbox\longlat.csv', 'r') as f:
reader = csv.reader(f)
result = {}
for row in reader:
result[row[0]] = [int(e) for i in row[1:]] # float instead of int is also valid
每行将有 3 个值。您希望第一个作为键,其余的作为值。
>>> row
['NYC','22','55']
>>> {row[0]: row[1:]}
{'NYC': ['22', '55']}
您可以创建整个字典:
lookup = {row[0]: row[1:] for row in input_file}
您也可以像这样使用 pandas:
import pandas as pd
df = pd.read_csv(r'C:\Python\Sandbox\longlat.csv')
result = {}
for index, row in df.iterrows():
result[row[0]] = row[1:]
我正在尝试将 .csv 导入 Python。我已经阅读了大量文档,但对于我的一生,我无法弄清楚如何执行以下操作。
CSV格式如下
NYC,22,55
BOSTON,39,22
我正在尝试生成以下内容:{NYC = [22,55], BOSTON = [39,22]} 这样我就可以在每个循环中调用 i[0] 和 i[1]多变的。
我试过了
import csv
input_file = csv.DictReader(open("C:\Python\Sandbox\longlat.csv"))
for row in input_file:
print(row)
它打印我的变量,但我不知道在城市名称中嵌套两个数值并生成我希望获得的列表。
感谢您的帮助,抱歉我的菜鸟问题-
使用词典理解:
import csv
with open(r'C:\Python\Sandbox\longlat.csv', mode='r') as csvfile:
csvread = csv.reader(csvfile)
result = {k: [int(c) for c in cs] for k, *cs in csvread}
这适用于 python-3.x,并在我的机器上生成:
>>> result
{'NYC': [22, 55], 'BOSTON': [39, 22]}
它也适用于任意数量的列。
如果您使用 python-2.7,您可以在序列解包上使用索引和切片:
import csv
with open(r'C:\Python\Sandbox\longlat.csv', mode='r') as csvfile:
csvread = csv.reader(csvfile)
result = {<b>row[0]</b>: [int(c) for c in <b>row[1:]</b>] for <b>row</b> in csvread}
这是一个提示。尝试熟悉 str.split(x)
函数
strVar = "NYC,22,55"
listVar = strVar.split(',') # ["NYC", "22", "55"]
cityVar = listVar[0] # "NYC"
restVar = listVar[1:]; # ["22", "55"]
# If you want to convert `restVar` into integers
restVar = map(int, restVar)
如果您不熟悉 python 推导式,可以使用以下使用 for 循环的代码:
import csv
with open('C:\Python\Sandbox\longlat.csv', 'r') as f:
reader = csv.reader(f)
result = {}
for row in reader:
result[row[0]] = row[1:]
如果您希望数字是字符串,则前面的代码有效,如果您希望它们是数字,请使用:
import csv
with open('C:\Python\Sandbox\longlat.csv', 'r') as f:
reader = csv.reader(f)
result = {}
for row in reader:
result[row[0]] = [int(e) for i in row[1:]] # float instead of int is also valid
每行将有 3 个值。您希望第一个作为键,其余的作为值。
>>> row
['NYC','22','55']
>>> {row[0]: row[1:]}
{'NYC': ['22', '55']}
您可以创建整个字典:
lookup = {row[0]: row[1:] for row in input_file}
您也可以像这样使用 pandas:
import pandas as pd
df = pd.read_csv(r'C:\Python\Sandbox\longlat.csv')
result = {}
for index, row in df.iterrows():
result[row[0]] = row[1:]