将 CSV 列转换为列表
Convert CSV column to list
假设我有一个 CSV 文件。
它包含:
a,b,c
1,2,3
4,5,6
7,8,9
如何将标有 'a' 的列转换为列表,而无需对其行进行硬编码?
最初,我为第一行做一个 readline a,b,c
,然后为每个变量硬编码一行。但后来我想:如果我想这样做而 CSV 文件的排列方式可能不同怎么办 - 说:
b,a,c
2,1,3
5,4,6
8,7,9
解决此问题的最佳方法是什么?
csv.DictReader
将 CSV 文件的每一行变成一个字典,其中 headers 列作为键。对于您的情况(假设您问题中的两个示例分别命名为 abc.csv
和 bac.csv
),您可以这样使用它:
from csv import DictReader
with open("abc.csv") as f:
a1 = [row["a"] for row in DictReader(f)]
with open("bac.csv") as f:
a2 = [row["a"] for row in DictReader(f)]
# a1 == a2 == ['1', '4', '7']
您可以使用 pandas 库执行此操作:
import pandas
data = pandas.read_csv("test.csv", header=0)
col_a = list(data.a)
col_b = list(data.b)
col_c = list(data.c)
col_a
、col_b
和col_c
中的值如下:
[1, 4, 7]
[2, 5, 8]
[3, 6, 9]
您可以使用 collections.defaultdict
:
import collections
my_dict = collections.defaultdict(list)
with open('your_file') as f:
header = next(f).strip().split(',')
for x in f:
x = x.strip().split(',')
my_dict[header[0]].append(x[0])
my_dict[header[1]].append(x[1])
my_dict[header[2]].append(x[2])
假设我有一个 CSV 文件。 它包含:
a,b,c
1,2,3
4,5,6
7,8,9
如何将标有 'a' 的列转换为列表,而无需对其行进行硬编码?
最初,我为第一行做一个 readline a,b,c
,然后为每个变量硬编码一行。但后来我想:如果我想这样做而 CSV 文件的排列方式可能不同怎么办 - 说:
b,a,c
2,1,3
5,4,6
8,7,9
解决此问题的最佳方法是什么?
csv.DictReader
将 CSV 文件的每一行变成一个字典,其中 headers 列作为键。对于您的情况(假设您问题中的两个示例分别命名为 abc.csv
和 bac.csv
),您可以这样使用它:
from csv import DictReader
with open("abc.csv") as f:
a1 = [row["a"] for row in DictReader(f)]
with open("bac.csv") as f:
a2 = [row["a"] for row in DictReader(f)]
# a1 == a2 == ['1', '4', '7']
您可以使用 pandas 库执行此操作:
import pandas
data = pandas.read_csv("test.csv", header=0)
col_a = list(data.a)
col_b = list(data.b)
col_c = list(data.c)
col_a
、col_b
和col_c
中的值如下:
[1, 4, 7]
[2, 5, 8]
[3, 6, 9]
您可以使用 collections.defaultdict
:
import collections
my_dict = collections.defaultdict(list)
with open('your_file') as f:
header = next(f).strip().split(',')
for x in f:
x = x.strip().split(',')
my_dict[header[0]].append(x[0])
my_dict[header[1]].append(x[1])
my_dict[header[2]].append(x[2])