Python 将值分配到特定位置的数据帧时出现问题
我在为特定位置(列和索引)的数据帧分配值时遇到问题。 首先,我创建一个空数据帧:Python 将值分配到特定位置的数据帧时出现问题,python,pandas,Python,Pandas,我在为特定位置(列和索引)的数据帧分配值时遇到问题。 首先,我创建一个空数据帧: self.timeseries = pd.DataFrame( columns = ["temperature", "state_of_charge", "m_ice", "m_water"], index = pd.date_range(
self.timeseries = pd.DataFrame(
columns = ["temperature", "state_of_charge", "m_ice", "m_water"],
index = pd.date_range(
start = self.environment.start,
end = self.environment.end,
freq = self.environment.time_freq,
name = "time"
)
)
稍后,我尝试为每个索引的每个列指定值:
self.timeseries.temperature.loc[timestamp] = self.current_temp
self.timeseries.state_of_charge.loc[timestamp] = self.state_of_charge
self.timeseries.m_ice.loc[timestamp] = self.m_ice /self.mass
self.timeseries.m_water.loc[timestamp] = self.m_water / self.mass
上面代码的第一行似乎可以工作。但一旦到达第二行,我会收到以下错误消息:
ValueError: No axis named 1 for object type <class 'pandas.core.series.Series'>
ValueError:对象类型没有命名为1的轴
在代码的其他部分中,使用了完全相同的过程,并且有效
非常感谢每一个帮助提前
注:我不知道是否有必要,但其他信息:
我在Anaconda1.9.12中使用Spyder3.3.6(Python 3.7)
import pandas as pd
timeseries = pd.DataFrame(
columns = ["temperature", "state_of_charge", "m_ice", "m_water"],
index =pd.date_range(start ='01-01-2018',
end ='01-02-2018', freq ='5H')
)
print(timeseries)
timeseries.temperature.loc['2018-01-01 00:00:00'] = 15
timeseries.state_of_charge.loc['2018-01-01 00:00:00'] = 10
timeseries.m_ice.loc['2018-01-01 00:00:00'] = 1
timeseries.m_water.loc['2018-01-01 00:00:00'] = 1
print(timeseries)
结果:
temperature state_of_charge m_ice m_water
2018-01-01 00:00:00 NaN NaN NaN NaN
2018-01-01 05:00:00 NaN NaN NaN NaN
2018-01-01 10:00:00 NaN NaN NaN NaN
2018-01-01 15:00:00 NaN NaN NaN NaN
2018-01-01 20:00:00 NaN NaN NaN NaN
temperature state_of_charge m_ice m_water
2018-01-01 00:00:00 15 10 1 1
2018-01-01 05:00:00 NaN NaN NaN NaN
2018-01-01 10:00:00 NaN NaN NaN NaN
2018-01-01 15:00:00 NaN NaN NaN NaN
2018-01-01 20:00:00 NaN NaN NaN NaN
您可以尝试遍历数据帧的长度,并使用整数索引位置将值填入列中。这些值可以是计算出的值,其实并不重要。逻辑将保持不变
import pandas as pd
timeseries = pd.DataFrame(
columns = ["temperature", "state_of_charge", "m_ice", "m_water"],
index =pd.date_range(start ='01-01-2018 00:00:00',
end ='01-02-2018 00:00:00', freq='0.25H')
)
for i in range(len(timeseries)):
# this an example, can be any calculated value or function return #
timeseries.temperature.iloc[i] = i
timeseries.state_of_charge.iloc[i] = i+1
timeseries.m_ice.iloc[i] = i+2
timeseries.m_water.iloc[i] = i+3
print(timeseries)
temperature state_of_charge m_ice m_water
2018-01-01 00:00:00 0 1 2 3
2018-01-01 00:15:00 1 2 3 4
2018-01-01 00:30:00 2 3 4 5
2018-01-01 00:45:00 3 4 5 6
2018-01-01 01:00:00 4 5 6 7
... ... ... ... ...
2018-01-01 23:00:00 92 93 94 95
2018-01-01 23:15:00 93 94 95 96
2018-01-01 23:30:00 94 95 96 97
2018-01-01 23:45:00 95 96 97 98
2018-01-02 00:00:00 96 97 98 99
不能不看数据就说,但当您调用self.timeseries.temperature.loc[timestamp]这样的列时,您似乎在尝试获取不存在的内容。尝试删除.loc,可以添加数据样本吗?开始时数据不存在-数据框为空。为每个时间戳计算数据,然后根据列和时间戳分配数据。我将试图通过编辑我的帖子来澄清这正是我所期望的工作方式。唯一不同的是,我在时间步上迭代,比如:2015-01-01-00:00:00;2015-01-01 00:00:15; 所以freq=“15min”只需在代码中检查您没有用“1”更改列名