2 votes

problème d'attribution de valeurs à un cadre de données pandas à un endroit spécifique

J'ai un problème d'affectation de valeurs à un cadre de données à un emplacement spécifique (colonne et index). Je crée d'abord un dataframe vide :

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"
                        )
                )

Ensuite, j'essaie d'attribuer des valeurs à chaque colonne pour chaque index :

        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

la première ligne du code ci-dessus semble fonctionner. Mais une fois qu'il atteint la deuxième ligne, j'obtiens le message d'erreur suivant :

ValueError: No axis named 1 for object type <class 'pandas.core.series.Series'>

Dans d'autres parties du code, on utilise exactement la même procédure, et cela fonctionne.

Merci d'avance pour toute aide !

P.S. : Je ne sais pas si c'est nécessaire, mais une information supplémentaire :

Je travaille avec spyder 3.3.6 (Python 3.7) dans anaconda 1.9.12

0voto

Dinesh Jinjala Points 11
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)

Résultat :

                    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

0voto

Praks Points 57

Vous pouvez essayer d'itérer sur la longueur du cadre de données et d'utiliser l'emplacement de l'index des entiers pour remplir les valeurs dans les colonnes. La logique restera la même.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X