提取 csv 文件特定列以在 Python 中列出

Posted

技术标签:

【中文标题】提取 csv 文件特定列以在 Python 中列出【英文标题】:Extract csv file specific columns to list in Python 【发布时间】:2013-10-29 11:08:10 【问题描述】:

我要做的是使用 matplotlib、basemap、python 等在地图上绘制特定风暴的纬度和经度值。我的问题是我试图提取纬度、经度和名称地图上的风暴,但我在尝试将列提取到列表中的第 41-44 行之间不断出现错误。有人可以帮我解决这个问题。提前致谢。

文件如下所示:

1957,AUDREY,HU, 21.6N, 93.3W
1957,AUDREY,HU,22.0N,  93.4W
1957,AUDREY,HU,22.6N,  93.5W
1957,AUDREY,HU,23.2N,  93.6W

我希望列表如下所示:

latitude = [21.6N,22.0N,23.4N]
longitude = [93.3W, 93.5W,93.8W]
name = ["Audrey","Audrey"]

这是我目前所拥有的:

data = np.loadtxt('louisianastormb.csv',dtype=np.str,delimiter=',',skiprows=1)
'''print data'''

data = np.loadtxt('louisianastormb.csv',dtype=np.str,delimiter=',',skiprows=0)

f= open('louisianastormb.csv', 'rb')
reader = csv.reader(f, delimiter=',')
header = reader.next()
zipped = zip(*reader)

latitude = zipped[3]
longitude = zipped[4]
names = zipped[1]
x, y = m(longitude, latitude)

这是我收到的最后一条错误消息/回溯:

回溯(最近一次通话最后一次): 文件“/home/darealmzd/lstorms.py”,第 42 行,在

header = reader.next() _csv.Error:在未引用的字段中看到换行符 - 您需要以通用换行模式打开文件吗?

【问题讨论】:

我认为问题出在您的 csv 文件而不是您的代码中。您的代码使用提供的示例 csv 输入按预期运行。这篇文章可能会提供一些见解。 ***.com/questions/6726953/… 【参考方案1】:

这看起来像是代码中的行尾问题。如果您要使用所有这些其他科学软件包,您不妨将Pandas 用于CSV 读取部分,它比csv 模块更强大且更有用:

import pandas
colnames = ['year', 'name', 'city', 'latitude', 'longitude']
data = pandas.read_csv('test.csv', names=colnames)

如果您想要问题中的列表,您现在可以这样做:

names = data.name.tolist()
latitude = data.latitude.tolist()
longitude = data.longitude.tolist()

【讨论】:

这很棒。谢谢,我以前没听说过熊猫。一件小事,如果你在不同长度的列上运行它,较短的列将填充nulls 以匹配最长的列。你知道解决办法吗? 我不确定如何在 CSV 中拥有不同长度的列?但是您可以使用 data.dropna() 摆脱 na 值 是的,我正在为一个小脚本做一些黑客攻击。谢谢=] @chthonicdaemon 我尝试将您的代码用于类似的示例,但是我认为 pands 找不到我的文件,所以它给了我错误“文件 text.csv 不存在”而不是文本有我的文件的名称。我应该添加文件的路径吗?我该怎么做? @Euler_Salter 我认为这是一个新问题,而不是对旧问题的评论。【参考方案2】:

标准库版本(无 pandas)

这假设 csv 的第一行是标题

import csv

# open the file in universal line ending mode 
with open('test.csv', 'rU') as infile:
  # read the file as a dictionary for each row (header : value)
  reader = csv.DictReader(infile)
  data = 
  for row in reader:
    for header, value in row.items():
      try:
        data[header].append(value)
      except KeyError:
        data[header] = [value]

# extract the variables you want
names = data['name']
latitude = data['latitude']
longitude = data['longitude']

【讨论】:

您可以使用data.setdefault(header, list()).append(value),而不是try/except。这将在您第一次访问密钥时创建一个空列表。 try/except 更快,但是,以防文件很大。 我得到:对于标题,row.items() 中的值:^ TabError:缩进中制表符和空格的使用不一致【参考方案3】:
import csv
from sys import argv

d = open("mydata.csv", "r")

db = []

for line in csv.reader(d):
    db.append(line)

# the rest of your code with 'db' filled with your list of lists as rows and columbs of your csv file.

【讨论】:

以上是关于提取 csv 文件特定列以在 Python 中列出的主要内容,如果未能解决你的问题,请参考以下文章

Python:使用熊猫从csv文件中提取特定列(包含特殊字符)

python 从文本中提取每一行的特定字符串输出到csv文件

当我使用python从CSV文件中提取特定关键字的数据时,为什么会出现KeyError?

如何列出 CSV 文件中的各个列?

Python数据处理 | 批量提取文件夹下的csv文件,每个csv文件根据列索引提取特定几列,并将提取后的数据保存到新建的一个文件夹

Python数据处理 | 批量提取文件夹下的csv文件,每个csv文件根据列索引提取特定几列,并将提取后的数据保存到新建的一个文件夹