私はmosquittoを使用してデータを受け取り、python pandasを使用してcsvファイルとして保存しようとしています。スクリプトを停止するまで、データは続きます。 mqtt_sub.py
スクリプト上からpandas.core.common.PandasError:DataFrameコンストラクタが正しく呼び出されていません
mqtt_pub.py
import paho.mqtt.client as mqtt
import random
import schedule
import time
mqttc = mqtt.Client("python_pub")
mqttc.connect("localhost", 1883)
def job():
mqttc.publish("hello/world", random.randint(1, 10))
schedule.every(1).seconds.do(job)
while True:
schedule.run_pending()
time.sleep(1)
mqttc.loop(2)
mqtt_sub.py
import paho.mqtt.client as mqtt
import pandas as pd
def on_connect(client, userdata, rc):
print("Connected with result code "+str(rc))
client.subscribe("hello/world")
def on_message(client, userdata, msg):
datas = map(int, msg.payload)
for num in datas:
df = pd.DataFrame(data=datas, columns=['the_number'])
df.to_csv("testing.csv")
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect("localhost", 1883, 60)
client.loop_forever()
、私はこの
| the _number
0 | 2
2
のように見えるtesting.csv
取得するには、私がbefo受け取る最後の数字であります私はmqtt_sub.py
スクリプト
Connected with result code 0
[3]
[9]
[5]
[3]
[7]
[2]
...
...
KeyboardInterrupt
を停止し再私はdf = pd.DataFrame(data=num, columns=['the_number'])
に次のdf = pd.DataFrame(data=datas, columns=['the_number'])
を変更しようとすると、次のエラーが
pandas.core.common.PandasError: DataFrame constructor not properly called!
を発生したことを達成するために
testing.csv
このような
| the_number
0 | 3
1 | 9
2 | 5
...
...
5 | 2
を得るために期待していました
エラーを解決する方法はありますか?私はまた、ここでforループを適切に使用しなかったと感じます。
ご協力いただきありがとうございます。
[UPDATE]
私はNulljackからの助けを借りてon_message
方法
def on_message(client, userdata, msg):
datas = map(int, msg.payload)
df = pd.DataFrame(data=datas, columns=['the_number'])
f = open("test.csv", 'a')
df.to_csv(f)
f.close()
に次の行を変更/追加し、私は
| the_number
0 | 3
| the_number
0 | 9
| the_number
0 | 5
| the_number
0 | 3
| the_number
0 | 7
ファイル私のCSVでこのような結果を得ることができています
私の目標は、CSVファイルでこれを実現することです。
| the_number
0 | 3
1 | 9
2 | 5
3 | 3
4 | 7
私はへの接続方法の使用がon_connect'ある '、と信じて怒鳴るのコードを使用してみてくださいモスキットブローカー。 'on_message'は、mosquittoブローカ経由で受信したメッセージを表示するためのメソッドの使い方です。 – Fang
ええ、 'on_message'メソッドは、あなたがメッセージを受け取るたびに呼び出さなければならないので、' df.to_csv( "testing.csv") 'を複数回呼び出すことになります。ファイルを上書きするのではなく、パンダを使用してCSVファイルに物を追加する方法について詳しくは、 – Nulljack
http://stackoverflow.com/questions/17134942/pandas-dataframe-output-end-of-csv @Fang – Nulljack