[英]Pythonic way to copy a column from a CSV file
我正在尋找一種pythonic和簡潔的方法來選擇.csv文件中的列並存儲列的所有單元格,例如列表。
import csv
with open("/path/to/file.csv","r") as csvfile:
reader = csv.DictReader(csvfile, delimiter=";")
# TODO: select column for key "foo"
# TODO: select column for key "bar"
# TODO:store "foo" data in list
# TODO: store "bar" data in list
在純Python中直接從DictReader行dicts中獲取列,而其他人現在可能正在寫這個效果的答案,所以我不會重復這些努力,而是在我最喜歡的Python庫之一中展示如何做到這一點。數據操作, 熊貓 :
>>> import pandas as pd
>>> df = pd.read_csv("somefile.csv", sep=";")
>>> df
foo bar apple
0 1 100 pear
1 2 200 orange
2 3 300 tangerine
3 4 400 peach
>>> df["foo"]
0 1
1 2
2 3
3 4
Name: foo
>>> df["bar"]
0 100
1 200
2 300
3 400
Name: bar
>>> df["foo"] * df["bar"]
0 100
1 400
2 900
3 1600
>>> list(df["foo"] * df["bar"])
[100, 400, 900, 1600]
在黑暗的pandas
時代,我有自己的手工制作的圖書館,可以進行這種數據訪問。 幾年前與pandas
約十五分鍾后,我把它扔了..
如果你想分別訪問這些文件中的每一列,這將會是最有效地遍歷csv
一旦收集列數據:
import defaultdict
import csv
columns = defaultdict(list)
with open("/path/to/file.csv","r") as csvfile:
reader = csv.DictReader(csvfile, delimiter=";")
for row in reader:
for key, value in row.iteritems():
defaultdict[key] = value
現在columns
是一個字典,每列有一個列表:
for value in columns['foo']:
# do something with the `foo` column
# etc.
bash-3.2$ cat tcsv.py
import csv
def get_col(filename, col=0):
for row in csv.reader(open(filename), delimiter=';'):
yield row[col]
print list(get_col("tar.data"))
bash-3.2$ python tcsv.py
['1.0', '4.7', '4.7']
bash-3.2$ cat tar.data
1.0;2.3;4.5;512
4.7;9.2;6.7;240
4.7;1.8;4.3;912
import csv
def col_selector(table, column_key):
return [row[column_key] for row in table]
with open("/path/to/file.csv","r") as csvfile:
reader = csv.DictReader(csvfile, delimiter=";")
table = [row for row in reader]
foo_col = col_selector(table, "foo")
bar_col = col_selector(table, "bar")
這是一種直接的方法,可以在單獨的函數中使用列表推導。 當然,你可以獲得一點點發燒友並使用__getitem__
實現表對象(就像Pandas的回答一樣),但這似乎適用於你的目的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.