[英]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.