【发布时间】:2014-10-19 08:00:26
【问题描述】:
我正在尝试从包含一些缺失数据的 csv 文件中提取数据
Num,Sym,Element,Group,Weight,Density,Melting,Boiling,Heat,Eneg,Radius,Oxidation
1,H,Hydrogen,1,1.008,0.00008988,14.01,20.28,14.304,2.2,53,"[1,-1]"
2,He,Helium,18,4.002602,0.0001785,0.956,4.22,5.193,No_Data,31,[0]
etc
在这种情况下,缺失值是惰性气体氦的电负性。我还想一次解析这些数据(即当我读入它时)并将其转换为适当的数据类型,以便我可以使用此函数根据需要执行计算
import csv
def read_periodic_table():
per_table = {}
with open("element_list.csv", "r") as f:
my_reader = csv.reader(f)
my_reader.next() # Just skipping the header
try:
while True:
tl = my_reader.next()
per_table[tl[1]] =(int(tl[0]), tl[2], int(tl[3]), float(tl[4]),
float(tl[5]), float(tl[6]), float(tl[7]),
float(tl[8]), float(tl[9]), float(tl[10]),
list(tl[11]))
except StopIteration:
return
这很好用,除非有些地方没有数据(如上)并且我得到TypeError。我明白为什么会出现错误 - 你不能真正将 "No_Data" 转换为浮点数。
我已经阅读了这些问题
- Definitive way to parse alphanumeric CSVs in Python with scipy/numpy
- How do you deal with missing data using numpy/scipy?
这可能会回答我的问题,但我想避免只为一个功能使用额外的库。
我能想到的唯一处理方法是一些 try/except 块......其中很多
类似的东西
num = tl[0]
name = tl[2]
group = tl[3]
try:
weight = float(tl[4])
except TypeError:
weight = "No_Data"
finally:
try:
density = float(tl[5])
except TypeError:
density = "No_Data"
finally:
try:
...
出于我希望是显而易见的原因,我宁愿避免。有没有办法只使用标准库来完成这个?如果答案是 - “不,不是很容易/很好”,那很好,我将使用 numpy/pandas。如果可能的话,我想避免这种情况。或者,如果 numpy/pandas 有一个很好的答案,并且有一个令人信服的理由说明为什么使用额外的库也不错,我也会接受。
我不想使用第三方库的原因是,包括我自己在内的几个人将致力于此,然后会有相当多的人使用它。我宁愿不让他们都安装另一个库来完成这项工作。
【问题讨论】:
标签: python parsing csv numpy pandas