我如何将一个 while 循环的结果合并到一个输出中?
How do i combine the results from a while loop winto one output?
我想从 while
循环中取出一个 table,而不是多个 table。我试图合并数据帧,但这只给出了 2 行的多个 table,而不是包含所有数据的 1 个大 table。 while
循环用于从每个传感器获取数据,这些数据需要显示在一个 table.
中
我尝试以不同的方式合并数据,例如 df.merge
,还使用其他语句来获取数据,例如 if/else 和 for 语句。我最接近想要的结果是使用 while 语句并通过 pd.concat
组合结果。这给了我 table 的 2 行,但没有得到想要的 table 和所有结果。
两个数据框中的维度相同。数据帧是使用这个制作的:
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]
}
创建数据帧之前的虚拟数据,所以这是我代码中的 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]}
这是一个想要的结果的例子:
Name
<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 所说,您可能想要做的是在循环之前初始化一个变量。
这可能是一个列表,您可以在其中填写并稍后创建数据框。或者您可以直接为每个传入的 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 进行连接。
您可能只收到 2 个结果的原因是,在接下来的 运行 中,您没有使用结果更新,而是再次更新 df1 和 df2。
输出
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
我想从 while
循环中取出一个 table,而不是多个 table。我试图合并数据帧,但这只给出了 2 行的多个 table,而不是包含所有数据的 1 个大 table。 while
循环用于从每个传感器获取数据,这些数据需要显示在一个 table.
我尝试以不同的方式合并数据,例如 df.merge
,还使用其他语句来获取数据,例如 if/else 和 for 语句。我最接近想要的结果是使用 while 语句并通过 pd.concat
组合结果。这给了我 table 的 2 行,但没有得到想要的 table 和所有结果。
两个数据框中的维度相同。数据帧是使用这个制作的:
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]
}
创建数据帧之前的虚拟数据,所以这是我代码中的 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]}
这是一个想要的结果的例子:
Name | <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 所说,您可能想要做的是在循环之前初始化一个变量。
这可能是一个列表,您可以在其中填写并稍后创建数据框。或者您可以直接为每个传入的 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 进行连接。
您可能只收到 2 个结果的原因是,在接下来的 运行 中,您没有使用结果更新,而是再次更新 df1 和 df2。
输出
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