我正在尝试从csvfile读取数据列,然后使用它进行一些计算。问题是我的时间戳是十六进制的。我需要读入它们并转换为十进制,但除了Nan之外,我不知道如何将其转换为python。
我尝试过先将其设置为字符串。
colnames = [ 'sensor', 'x', 'y', 'z', 'azimuth', 'elevation', 'roll', 'timestamp']
data = pd.read_csv('The Project- 7-19 SS Arc Test.csv', names = colnames)
hexa_time_initial = data.timestamp.tolist()
它必须是十六进制的列表,但仅仅是nan的列表。当它尝试运行转换循环时,出现错误,它无法使用显式基数转换非字符串。
Sample of excel file
1, 0.614, -7.798, -1.465, -6.117, 3.050, 5.231,0x42ef4, 1, 0.615, -7.798, -1.465, -6.109, 3.049, 5.231,0x42f05, 1, 0.616, -7.798, -1.465, -6.097, 3.045, 5.232,0x42f15, 1, 0.615, -7.798, -1.465, -6.108, 3.048, 5.232,0x42f26, 1, 0.614, -7.798, -1.465, -6.121, 3.051, 5.230,0x42f37, 1, 0.615, -7.798, -1.465, -6.107, 3.048, 5.230,0x42f47, 1, 0.616, -7.798, -1.465, -6.100, 3.046, 5.230,0x42f58, 1, 0.614, -7.798, -1.465, -6.116, 3.049, 5.230,0x42f69,
最佳答案
感谢您提供示例数据。我在这里发布消息,并不是因为我确定找到了解决方案,而是因为我无法在评论中显示输出。但我有一个建议,可能会有所帮助。
当您阅读帖子中显示的csv数据时,得到以下输出:
sensor x y z azimuth elevation roll timestamp
1 0.614 -7.798 -1.465 -6.117 3.050 5.231 0x42ef4 NaN
1 0.615 -7.798 -1.465 -6.109 3.049 5.231 0x42f05 NaN
1 0.616 -7.798 -1.465 -6.097 3.045 5.232 0x42f15 NaN
1 0.615 -7.798 -1.465 -6.108 3.048 5.232 0x42f26 NaN
1 0.614 -7.798 -1.465 -6.121 3.051 5.230 0x42f37 NaN
1 0.615 -7.798 -1.465 -6.107 3.048 5.230 0x42f47 NaN
1 0.616 -7.798 -1.465 -6.100 3.046 5.230 0x42f58 NaN
1 0.614 -7.798 -1.465 -6.116 3.049 5.230 0x42f69 NaN
我认识到,
timestamp
列是NaN
,但传感器列也不是第一列。我认为这是因为从excel创建的csv行以逗号结尾。然后,Pandas就像在末尾有一个(空)额外的列。而且,因为您有名字,所以还有一列,因此似乎在第一列中创建了一个索引。然后,这还会使列名移位一。这种行为对我来说似乎很奇怪,但也是可以预期的。可以肯定的是,我刚刚创建了一个bug ticket for this, to be sure。您使用的是哪个熊猫版本?如果只是稍微更改阅读代码,则可以避免这种情况:
df= pd.read_csv(io.StringIO(raw), sep=',\s*', names=colnames, index_col=False)
像这样阅读
df
之后,看起来会更好: sensor x y z azimuth elevation roll timestamp
0 1 0.614 -7.798 -1.465 -6.117 3.050 5.231 0x42ef4
1 1 0.615 -7.798 -1.465 -6.109 3.049 5.231 0x42f05
2 1 0.616 -7.798 -1.465 -6.097 3.045 5.232 0x42f15
3 1 0.615 -7.798 -1.465 -6.108 3.048 5.232 0x42f26
4 1 0.614 -7.798 -1.465 -6.121 3.051 5.230 0x42f37
5 1 0.615 -7.798 -1.465 -6.107 3.048 5.230 0x42f47
6 1 0.616 -7.798 -1.465 -6.100 3.046 5.230 0x42f58
7 1 0.614 -7.798 -1.465 -6.116 3.049 5.230 0x42f69
现在,已正确分配了列名称。这是因为
index_col=False
选项,该选项告诉熊猫不要将文件的第一列用作索引。如果愿意,您还可以添加
usecols=range(len(colnames))
这样的内容来告诉熊猫,它只应使用文件名中的任意列,因此,如果excel运行amok并在行末添加数十个逗号,您不会遇到问题,因为数据框中有许多空列和未命名列。您应该检查您是否真的要使用
sep=',\s*'
或更确切地说是sep=','
。第一个只是确保在列1的值之前删除前导空格...关于python - 如何将csv文件中的Nan列读取到python中以便可以使用数据?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57122015/