繁体   English   中英

使用 object 数据类型中的 pandas 从 CSV 读取单元格

[英]Read a cell from CSV using pandas in object data type

我一直致力于通过 Pandas 读取一个单元格。单元格中的值实际上用于从 Modbus 设备读取数据。 但由于 Pandas 正在将其作为字符串读取,因此我无法将其用于进一步处理。 谁能告诉我如何不从 Pandas 读取字符串类型的数据,或者读取单元格的实际格式/数据类型是什么

下面显示的数据是我在 CSV 中的数据,并试图从 Pandas 中读取它

client.read_holding_registers(0,unit=1)
client.read_holding_registers(1,unit=1)
client.read_holding_registers(2,unit=1)

下面是我用来读取 csv 数据的一段代码

file = ('MB_REGISTERS.csv')
print ("Starting to read MB CSV")
sheet1 = pds.read_csv(file)
total_rows = sheet1.shape[0]
Column_address = sheet1['Sheet1']
print (Column_address)

下面是运行代码后看到的output

ModbusTcpClient(127.0.0.1:502)
Starting to read MB CSV
Printing total rows
3
0    client.read_holding_registers(0,unit=1)
1    client.read_holding_registers(1,unit=1)
2    client.read_holding_registers(2,unit=1)
Name: MB_REGISTERS, dtype: object
['client.read_holding_registers(0,unit=1)'
 'client.read_holding_registers(1,unit=1)'
 'client.read_holding_registers(2,unit=1)']
Starting to read Modbus Register Address
object

如上所示,单元格以字符串格式读取。 当我直接从 python 代码读取与数组相同的值时,它正在工作。 以下是相同的示例

k1 = np.array([client.read_holding_registers(0,unit=1),client.read_holding_registers(1,unit=1)])
print (k1)

上面几行在此处打印所需的结果

[<pymodbus.register_read_message.ReadHoldingRegistersResponse object at 0x0FC1ECD0>
 <pymodbus.register_read_message.ReadHoldingRegistersResponse object at 0x0F3736D0>]

我希望 pandas 以可处理的格式而不是字符串形式读取 csv。 我希望我的问题很清楚。 提前致谢

像 Python 这样的脚本语言的乐趣/恐惧(取决于您的立场)之一是您可以使用eval() function 即时编写代码。

l = ['John','Graham','Michael']
strExpr = 'l[1]'
print(strExpr,'=',eval(strExpr))

给出以下结果:

l[1] = Graham

所以在这种情况下,

l = ['client.read_holding_registers(0,unit=1)',
     'client.read_holding_registers(1,unit=1)',
     'client.read_holding_registers(2,unit=1)']

k1 = np.array([eval(reg) for reg in l])

将评估基于字符串的表达式中的任何内容。

编辑:由于 OP 只想遍历项目一次,并假设client已经是有效的 object:

k1 = []

f = open('MB_REGISTERS.csv',mode='r')
while True:
    line = f.readline()   
    if not line:
        break
    k1.append(eval(line))

print(k1)

(注意。空行等可能需要额外检查。而且 eval() 似乎不介意在字符串末尾有换行符)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM