如何从 csv 文件中读取 Nan 列到 python 以便可以使用数据?
How to read column of Nan from csvfile into python so data can be used?
我正在尝试从 csv 文件中读取数据列,然后使用它进行一些计算。问题是我的时间戳是十六进制的。我需要读入它们并将其转换为十进制,但我不知道如何将它变成 python 除了 Nan。
我试过先把它变成一个字符串。
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,
感谢您提供示例数据。我 post 在这里,不是因为我确定我找到了解决方案,而是因为我无法在评论中显示输出。但我有一个建议,可能会有所帮助。
当我读取您在 post 中显示的 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。您使用的 pandas 版本是什么?
如果你只是稍微改变一下你的阅读代码,你就可以避免:
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
选项告诉 pandas 不要使用文件的第一列作为索引。
如果你愿意,你也可以添加类似 usecols=range(len(colnames))
的东西,它告诉 pandas,它应该只使用你的文件中你有名称的列,所以如果 excel 疯狂运行并在行末添加数十个逗号,您不会因为数据框中的许多空列和未命名列而遇到问题。
您应该检查是否真的要使用 sep=',\s*'
或 sep=','
。第一个只是确保您删除了第 1 列的值之前的前导空格...
我正在尝试从 csv 文件中读取数据列,然后使用它进行一些计算。问题是我的时间戳是十六进制的。我需要读入它们并将其转换为十进制,但我不知道如何将它变成 python 除了 Nan。
我试过先把它变成一个字符串。
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,
感谢您提供示例数据。我 post 在这里,不是因为我确定我找到了解决方案,而是因为我无法在评论中显示输出。但我有一个建议,可能会有所帮助。
当我读取您在 post 中显示的 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。您使用的 pandas 版本是什么?
如果你只是稍微改变一下你的阅读代码,你就可以避免:
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
选项告诉 pandas 不要使用文件的第一列作为索引。
如果你愿意,你也可以添加类似 usecols=range(len(colnames))
的东西,它告诉 pandas,它应该只使用你的文件中你有名称的列,所以如果 excel 疯狂运行并在行末添加数十个逗号,您不会因为数据框中的许多空列和未命名列而遇到问题。
您应该检查是否真的要使用 sep=',\s*'
或 sep=','
。第一个只是确保您删除了第 1 列的值之前的前导空格...