在对象数据类型中使用 pandas 从 CSV 中读取单元格
Read a cell from CSV using pandas in object data type
我一直在努力通过 Pandas 读取一个单元格。单元格中的值实际上用于从 Modbus 设备读取数据。但由于 Pandas 将其作为字符串读取,我无法将其用于进一步处理。谁能告诉我如何不从 Pandas 读取字符串类型的数据,或者读取单元格
的实际 format/datatype 是什么
下面显示的数据是我的 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)
下面是 运行 代码
后看到的输出
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 这样的脚本语言的 joys/horrors(取决于您的观点)之一是您可以使用 eval()
函数即时编写代码。
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
已经是一个有效对象:
k1 = []
f = open('MB_REGISTERS.csv',mode='r')
while True:
line = f.readline()
if not line:
break
k1.append(eval(line))
print(k1)
(注意。可能需要对空行等进行额外检查。而且 eval() 似乎不介意在字符串末尾使用换行符)
我一直在努力通过 Pandas 读取一个单元格。单元格中的值实际上用于从 Modbus 设备读取数据。但由于 Pandas 将其作为字符串读取,我无法将其用于进一步处理。谁能告诉我如何不从 Pandas 读取字符串类型的数据,或者读取单元格
的实际 format/datatype 是什么下面显示的数据是我的 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)
下面是 运行 代码
后看到的输出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 这样的脚本语言的 joys/horrors(取决于您的观点)之一是您可以使用 eval()
函数即时编写代码。
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
已经是一个有效对象:
k1 = []
f = open('MB_REGISTERS.csv',mode='r')
while True:
line = f.readline()
if not line:
break
k1.append(eval(line))
print(k1)
(注意。可能需要对空行等进行额外检查。而且 eval() 似乎不介意在字符串末尾使用换行符)