【发布时间】:2022-01-20 13:52:20
【问题描述】:
我想从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]
}
创建数据帧之前的虚拟数据,所以这在我的代码中是 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)
【问题讨论】:
-
df1和df2有哪些维度?索引/列是否相同?您能否添加一些虚拟数据以便我们重现该问题? -
只需在循环前初始化一个列表,将列表与循环中的每个数据帧一起附加,然后在循环外的列表上运行
pd.concat。
标签: python pandas dataframe while-loop