0
votes

Comment mettre deux dataframes de pandas ensemble, avec une dates manquantes de Dataframe

J'ai des données historiques sur un ticker dans une source de données et des données de dividendes historiques dans un autre Dataframe. Ils ressemblent à ceci:

        Date        High        Low         Open        Close       Volume      Adj Close       Dividend
0       1993-01-29  43.968750   43.750000   43.968750   43.937500   1003200.0   26.453930           
1       1993-02-01  44.250000   43.968750   43.968750   44.250000   480500.0    26.642057           
2       1993-02-02  44.375000   44.125000   44.218750   44.343750   201300.0    26.698507           
3       1993-02-03  44.843750   44.375000   44.406250   44.812500   529400.0    26.980742           
4       1993-02-04  45.093750   44.468750   44.968750   45.000000   531500.0    27.093624           
... ... ... ... ... ... ... ...
6809    2020-02-13  338.119995  335.559998  335.859985  337.059998  54501900.0  337.059998          1.570
6810    2020-02-14  337.730011  336.200012  337.510010  337.600006  64582200.0  337.600006          1.570
6811    2020-02-18  337.670013  335.209991  336.510010  336.730011  57226200.0  336.730011          1.570
6812    2020-02-19  339.079987  337.480011  337.790009  338.339996  48639100.0  338.339996          1.570
6813    2020-02-20  338.640015  333.681702  337.742004  336.894989  63193703.0  336.894989          1.570


3 commentaires

1) Vous devez toujours inclure vos données sous forme de texte, pas d'images. 2) Votre résultat attendu devrait être cohérent avec vos données d'échantillonnage.


@Quanghoang - Je l'ai eu! Fixé.


Regardez en utilisant pd.dataframe.mmerge


4 Réponses :


1
votes

Vous pouvez rejoindre, puis remplir les valeurs manquantes et enfin de renommer des colonnes.

Supprimer vos données de données sont nommés Market_prices et dividend_data

vous peut faire ceci: xxx

qui devrait faire.


2 commentaires

TypeError: "NOETYPEY" N'EST PAS iTABLE On Line 3 Dividend_Data ['"Value'], comment =" GAUCHE " J'ai essayé dividend_data [" date "] = pd.to_datetime (dividend_data ["date"])


@jangles, désolé, vous devez spécifier quelle clé à utiliser sur le fichier de données d'origine avec l'option on = 'date' . Je vais mettre à jour ma réponse.



1
votes

En supposant que df est la trame de données avec des données de ticker historiques et df2 est celui avec des informations de dividende. xxx


11 commentaires

Cela semble que cela devrait fonctionner, mais chaque ligne du nouveau dividende est nan pour moi. De plus, je ne suis pas sûr que cela correspondait et remplirait les dividendes correctement.


HM, il devrait pour associer des index - ce qui pourrait arriver ici est peut-être que le type diffère entre ces 2 - I.E. Une date est un DateTime et l'autre est la chaîne. Vous pouvez par exemple. Commencez par df ["date"] = pd.to_datetime (df ["date"]) (si df2 a DateTime index)


Les données de dividende sont venues à la date d'index. Je réinitialise l'index et apporté les dates dans leur propre couleur Colonne et essayé votre dividend_data ["date"] = pd.to_datetime (DF ["date"]) sur les deux dfs mais cela fait toujours la même chose. Ce doit être une erreur de type, que le pd.to_datetime ne semble pas corriger.


Nope, attendre - Pourriez-vous partager les résultats de df.index.dtype pour les deux cadres de données (une fois que les deux ont les deux date comme index)


Pour DF: AttributeError: "PlantIndex 'Object n'a aucun attribut' DTYPES ' pour DF2: attributError:" DateTimeIndex' objet n'a pas d'attribut 'DTYPES'


Mon mauvais - singulier - c'est df.index.dtype


Oh mon mauvais aussi, je dois mettre la date comme l'index, non comme une colonne. Mais c'est dtype ('int64') pour df et dtype (' pour df2.


Ok- vous devez changer date de données historique de ticker - j'ai ajouté la ligne pour ceci ci-dessus


Toujours nan :(. df2 est censé avoir la colonne de date comme l'index, correct?


Eh bien, ils sont censés être du même type (en fait pour toutes les solutions, que ce soit rejoindre , fusionner ou ci-dessus). Vous pouvez donc les rendre dans DateTime-S ou Strings ( objet ) pour vous assurer qu'ils sont tous deux du même type.


Je l'ai compris ici ici Stackoverflow.com/a/60329377/8142044 . Merci de votre aide!



0
votes

interpolée de @ Réponse de FJSH.

# Join the data
prices_with_dividends = features.set_index('Date').join(dividend_data.set_index('Date'))

# Fill missing values with previous data
prices_with_dividends['Value'].fillna(method='ffill', inplace=True)

# Rename column
prices_with_dividends.rename({'Value': 'Dividend'}, axis=1, inplace=True)


0 commentaires

0
votes
price_table['Date'] = pd.to_datetime(price_table['Date'])

0 commentaires