use*_*NaN 13 python csv string import excel
对于我未能快速解决的问题的快速提问:
我正在使用.csv文件,似乎无法找到将字符串转换为浮点数的简单方法.这是我的代码,
import csv
def readLines():
with open('testdata.csv', 'rU') as data:
reader = csv.reader(data)
row = list(reader)
for x in row:
for y in x:
print type(float(y)),
readLines()
Run Code Online (Sandbox Code Playgroud)
如您所见,它将在当前打印变量行中x组列表中每个y元素的类型; 这会产生一长串清单"<type 'float'>".但这实际上并没有将每个元素更改为float,也没有将for循环设置为执行float(y)(类型测试为每个元素返回'string').
我也尝试了literal_eval,但也失败了.将列表元素更改为浮点数的唯一方法是使用列表推导或手动创建新列表,但会丢失每个列表的原始格式(作为一个较大列表中的一组元素的列表).
我想整个问题实际上只是"使用Python以.csv或excel格式读取,组织和合成数据的最简单方法是什么?"
提前感谢那些有礼貌/知识渊博的人.
smc*_*mci 14
你是正确的,Python的内置csv模块在处理混合数据类型时是非常原始的,在导入时进行所有类型转换,甚至在那里有一个非常有限的选项菜单,这会破坏大多数真实世界的数据集(不一致)引用和转义,布尔值中缺少或不完整的值和因素,不匹配的Unicode编码导致字段内的幻像引用或转义字符,不完整的行将导致异常).修复csv导入是熊猫无数的好处之一.所以,你的最终答案确实是停止使用内置csv导入并开始使用pandas.但是,让我们从你的问题的字面答案开始.
首先你问"如何将字符串转换为浮点数,在csv导入上".答案是csv.reader(..., quoting=csv.QUOTE_NONNUMERIC)按照csv doc打开
csv.QUOTE_NONNUMERIC:指示读者将所有非引用字段转换为float类型.
如果您可以将所有未加引号的字段(整数,浮点数,文本,布尔等)转换为浮点数,那么这很有用,这通常是一个糟糕的主意,原因很多(布尔值中的缺失或NA值或因子将被静默压制) .而且它显然会在未加引号的文本字段上失败(抛出异常).所以它很脆弱,需要保护try..catch.
然后你问:'我认为整个问题实际上只是"使用Python以.csv或excel格式读取,组织和合成数据的最简单方法是什么?"
将蹩脚的csv.reader解决方案用于打开csv.reader(..., quoting=csv.QUOTE_NONNUMERIC)
但正如@geoffspear正确回答'你的"整体问题"的答案可能是"熊猫",虽然它有点含糊不清.
尝试类似下面的方法
import csv
def read_lines():
with open('testdata.csv', 'rU') as data:
reader = csv.reader(data)
for row in reader:
yield [ float(i) for i in row ]
for i in read_lines():
print(i)
# to get a list, instead of a generator, use
xy = list(read_lines())
Run Code Online (Sandbox Code Playgroud)
至于最简单的方法,我建议您查看xlrd,xlwt模块,就我个人而言,我总是很难处理所有不同的 CSV 格式。