簡體   English   中英

如何將while循環的結果結合到一個output?

[英]How do i combine the results from a while loop winto one output?

我想從while循環中取出一張表,而不是多張表。 我試圖合並數據框,但這只給出了多個包含 2 行的表,而不是 1 個包含所有數據的大表。 while循環用於從每個傳感器獲取數據,這些數據需要顯示在一個表中。

我嘗試以不同的方式合並數據,例如df.merge ,還使用其他語句來獲取數據,例如 if/else 和 for 語句。 我最接近想要的結果是使用 while 語句並通過pd.concat組合結果。 這給了我 2 行的表格,但沒有提供所有結果的想要的表格。

兩個數據框中的維度相同。 數據框是使用這個制作的:

d = {
    "name": [loc_name], 
    "onder(<"+ str(CO2_low)+ "ppm)": [lessperc], 
    "tussen("+str(CO2_low)+"-"+str(CO2_high)+"ppm)": [betweenperc], 
    "boven(>"+ str(CO2_high)+"ppm)": [moreperc]
}

制作 dataframe 之前的虛擬數據,所以這在我的代碼中是 d:

{'name': ['1.04'], 'onder(<950ppm)': [1.0], 'tussen(950-1100ppm)': [0.0], 'boven(>1100ppm)': [0.0]}
{'name': ['1.05'], 'onder(<950ppm)': [0.98], 'tussen(950-1100ppm)': [0.2], 'boven(>1100ppm)': [0.0]}
{'name': ['1.06'], 'onder(<950ppm)': [0.93], 'tussen(950-1100ppm)': [0.4], 'boven(>1100ppm)': [0.3]}

以下是所需結果的示例:

姓名 <950 950-1100 >1100
1.04 1.0 0.0 0.0
1.05 0.98 0.2 0.0
1.06 0.93 0.4 0.3

我目前使用的代碼:

#Create the dataframe
while(k==0):
    k = k + 1
#d is used to get the data from the sensors
    d = (sensordata)
    df1 = pd.DataFrame(data=d)

#Add rows for the next sensor/location
else:
    d = (sensordata)
    df2 = pd.DataFrame(data=d)

frames = [df1, df2]
result = pd.concat(frames)
print(result)

為了說明我做了一個 for 循環,因為提供的代碼示例是有限的。 正如@Parfait 所說,您可能想要做的是在循環之前初始化一個變量。

這可能是您填寫的列表,稍后創建 dataframe 。 或者你可以直接 append 到 dataframe 為每個 d 值進來。這里的用例不是很清楚,但在我看來你想立即更新每個新的 d 。

希望這個例子可以幫助:

d_values = [
{'name': ['1.04'], 'onder(<950ppm)': [1.0], 'tussen(950-1100ppm)': [0.0], 'boven(>1100ppm)': [0.0]},
{'name': ['1.05'], 'onder(<950ppm)': [0.98], 'tussen(950-1100ppm)': [0.2], 'boven(>1100ppm)': [0.0]},
{'name': ['1.06'], 'onder(<950ppm)': [0.93], 'tussen(950-1100ppm)': [0.4], 'boven(>1100ppm)': [0.3]}
]

result = None
for d in d_values:
    if result is None:
        result = pd.DataFrame(data=d)
    else:
        df2 = pd.DataFrame(data=d)
        result = pd.concat([result,df2], ignore_index=True)

現在您將對位於循環之外的結果 Dataframe 執行 concat。

您可能只收到 2 個結果的原因是因為在下一次運行中您沒有使用結果更新,而是再次使用 df1 和 df2。

Output

   name  onder(<950ppm)  tussen(950-1100ppm)  boven(>1100ppm)
0  1.04            1.00                  0.0              0.0
1  1.05            0.98                  0.2              0.0
2  1.06            0.93                  0.4              0.3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM