gpt4 book ai didi

python - 如何在不使用 numpy/pandas 的情况下处理 csv 文件中的缺失数据?

转载 作者:太空宇宙 更新时间:2023-11-03 18:13:12 25 4
gpt4 key购买 nike

我正在尝试从包含一些缺失数据的 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" 转换为 float 。

我已阅读这些问题

这可能可以回答我的问题,但我想避免仅为一个函数使用额外的库。

我能想到处理这个问题的唯一方法是一些 try/except block ......很多

类似这样的事情

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 有一个很棒的答案,并且有一个令人信服的理由为什么使用额外的库不会坏,我也会接受。

我不想使用第三方库的原因是,包括我自己在内的几个人将致力于此工作,然后很多人将使用它。我不想让他们都安装另一个库来完成这项工作。

最佳答案

如果我绝对决定不使用pandas,我会这样做:

  • 指定每列的类型
  • 编写一个快速转换函数来尝试每次转换
  • 使用列表合成/生成器表达式在每个单元格上调用转换函数

def convert_type(cell, typ):
try:
return typ(cell)
except TypeError:
return "No_Data"

# These lines go below 'tl = my_reader.next()' in your code
col_types = [int, str, int, float, float, float, float, float, float, float, float, list]
new_row = tuple(convert_type(cell, typ) for cell, typ in zip(tl, col_types))
per_table[tl[1]] = new_row

也就是说,如果我自己这样做,我肯定会使用pandas。像 Anaconda 这样的发行版是快速设置 Python 的一个不错的选择,其中已经包含许多有用的库,例如 pandas

关于python - 如何在不使用 numpy/pandas 的情况下处理 csv 文件中的缺失数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25498278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com