簡體   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