我正在尝试读取索引列中包含十六进制数字的CSV文件:
InputBits, V0, V1, V2, V3
7A, 0.000594457716, 0.000620631282, 0.000569834178, 0.000625374384,
7B, 0.000601155649, 0.000624282078, 0.000575955914, 0.000632111367,
7C, 0.000606026872, 0.000629149805, 0.000582689823, 0.000634561234,
7D, 0.000612115902, 0.000634625998, 0.000584526357, 0.000638235952,
7E, 0.000615769413, 0.000637668328, 0.000590648093, 0.00064987256,
7F, 0.000620640637, 0.000643144494, 0.000594933308, 0.000650485013,
我可以使用以下代码执行此操作:
df = pd.read_csv('data.csv', index_col=False,
converters={'InputBits': lambda x: int(x, 16)})
df.set_index('InputBits', inplace=True)
问题是这似乎不必要地笨重。有没有办法做一些与以下相同的事情?
df = pd.read_csv('data.csv', converters={'InputBits': lambda x: int(x, 16)})
此操作失败,因为InputBits
现在是第一个带
ValueError: invalid literal for int() with base 16: ' 0.000594457716'
答案 0 :(得分:2)
正如@root在这里指出的那样,这个例子中的问题是标题与列名和列值的错位,它们都有一个尾随逗号。实际上,the documentation处理了这种特定情况:
如果在每行末尾有一个带有分隔符的格式错误的文件,您可能会考虑使用index_col = False来强制pandas 而不是使用第一列作为索引(行名称)
此处的解决方案首先运行
sed -i 's/, \r$//' data.csv
摆脱最后的逗号(以及Windows行结尾)。然后,预期的命令几乎开箱即用:
pd.read_csv('data.csv', index_col='InputBits',
converters={'InputBits': lambda x: int(x, 16)})