【发布时间】:2021-10-11 18:09:08
【问题描述】:
警告:我是 Python、Pandas 和 PySerial 的新手......
我正在使用 Pandas 从 Excel 电子表格中读取值。 Excel 中的值存储为文本,但同时包含字母和数字字符。 see Snip of Excel data
我使用 Pandas 命令 mydata = pd.read_excel (*path etc goes here*) 导入这些 这个函数没有遇到问题)
然后我可以使用print(mydata) ....打印它们,输出看起来与 Excel 电子表格中显示的相同(即,没有额外字符):
0 MW000000007150000300000;
1 MW000100009850000200000;
2 MW000200009860000200000; #<<<<<<<< *Notice that there are NO square brackets and no extra Quotes*.
要通过 PySerial 函数 serial.write 将这些数据发送到我的 RS-232 链接设备,我正在循环遍历 必须(据我所知......)在 LIST 格式。因此,我使用命令 Allocation_list=mydata.values.tolist()
mydata 转换为 LIST
如果我print(Allocation_list),我发现添加了许多方括号和单引号,如您在此处看到的:
Allocation_list =([['MW000000007150000300000;'], ['MW000100009850000200000;'], ['MW000200009860000200000;'], ['MW000300009870000200000;'], ['MW000400009880000200000;'], ['MW000500009890000200000;']])
当我 > 将 LIST 中的值写入我的 RS-232 设备时,这些方括号不会被忽略。
事实上,这些值被写成(二进制版本的......)
0 memory written as ['MW000000007150000300000;']
1 memory written as ['MW000100009850000200000;']
2 memory written as ['MW000200009860000200000;']
3 memory written as ['MW000300009870000200000;']
4 memory written as ['MW000400009880000200000;']
5 memory written as ['MW000500009890000200000;']
不幸的是,为了让 RS-232 设备接受写入它的每一行作为可接受的命令,它们必须是该设备的精确命令格式,看起来像
MW000000007150000300000;
因此,必须以某种方式删除方括号和引号。
对于这个特殊问题的任何帮助将不胜感激,因为我已经尝试了其他“线程”中描述的几种方法,但它们似乎都不能正常工作,因为我的数据字段是一组字符串(转换为位仅当它们即将被写入 RS-232 设备时)。 M
【问题讨论】:
-
看起来您正在转储整个数据框列表。它只是需要进入列表的一列吗?如果是这样,请使用
Allocation_list = mydata['OneOfTheColumnNames'].to_list(),其中OneOfTheColumnNames是数据框中的有效列名。 -
感谢您的快速回复。事实上,我正在使用 Pandas 从电子表格的一个指定列中读取指定范围的行。所以数据框只有两列(分配给数据的编号在左侧;关注的数据在右侧)
-
不过,您应该引用一列。找出两种方式的输出差异:ibb.co/n6zfZmd
-
所以,当我从 Excel 工作表导入数据时,我没有指定列名。使用 pd.read.excel 函数时,我还没有看到分配列名的方法
-
开始时会比较棘手,但您可以使用
mydata.columns[0],因此某些行的列表将是Allocation_list = df.loc[2:4,mydata.columns[0]].to_list()。只需将2和4更改为所需的行范围,但请注意索引从0开始。因此2:4将获得第 3 到第 5 行。
标签: python pandas list brackets datafield