Python读取文件数据生成指定格式字典的代码调试求助
解决CSV读取后输出单数值而非数组的问题
嘿,我帮你搞定这个问题啦!你的代码现在输出带numpy数组的字典,是因为你把CSV里的单列数据转成了数组,但其实我们只需要那唯一的单个数值就行。下面是修改后的代码和关键说明:
问题原因
你用np.array()把CSV的整列数据转成了数组,但你的文件里只有一对数值,所以数组里只有一个元素,导致输出的字典值是数组类型而非纯数值。另外ix方法在pandas新版本里已经被弃用了,建议换成更稳定的iloc。
修改后的完整代码
import pandas as pd import numpy as np def read(): # 读取CSV,跳过开头空格,无表头 data = pd.read_csv('distance.csv', skipinitialspace=True, header=None) # 直接提取第一行第一列、第一行第二列的标量值,而非转成数组 x0 = data.iloc[0, 0] y0 = data.iloc[0, 1] # 构建期望格式的字典 position = {'x': x0 , 'y' : y0} print(position) # Python3需要加括号,Python2可以去掉括号 if __name__ == '__main__': try: read() except KeyboardInterrupt: rospy.loginfo('Shutting down')
关键改动说明
- 替换已弃用的
ix为iloc:iloc是pandas官方推荐的基于位置索引的方法,兼容性更好,避免版本报错 - 提取标量值而非数组:直接用
iloc[0,0]取第一行第一列的单个数值,而不是把整列转成数组,这样字典里的value就是纯数字,符合你的期望格式 - 调整print语句:如果用Python3,print必须是函数形式(加括号);如果是Python2,可以保持原无括号的写法
如果需要输出时带上position = 前缀,可以把print语句改成:
print(f"position = {position}")
这样运行后就会完全匹配你想要的输出格式啦。
内容的提问来源于stack exchange,提问作者Redhwan
相关产品推荐
相关产品推荐

