簡體   English   中英

按指定列合並多個數據框中的列

[英]Merging columns from multiple dataframes by specified column

我正在研究時間序列,我在csv文件中有10種不同的股票價格。 我想要做的只是將他們的收盤價格轉儲到數據框中,並將該列命名為股票名稱。

我手動完成,但應該有更好的方法。 而且我還有其他所有專欄。 這是我到目前為止所做的。 我需要它們與Date匹配。 如果其中一個人錯過了另一個人的日期,那么它應該有NaN值,這樣我就可以輕松放棄它們了。

這是我到目前為止所做的:

sym1 = "AAPL"
sym2 = "AMZN"
s1 = "./stocks/{}.csv".format(sym1)
s2 = "./stocks/{}.csv".format(sym2)
df = pd.read_csv(s1)
df['Date'] = pd.to_datetime(df['Date'])
df.set_index('Date', inplace=True)
ff = pd.read_csv(s2)
ff = ff.reindex(df.index, fill_value=np.nan)
ff[sym1] = df['Close']
ff[sym2] = ff['Close']
print(ff[[sym1, sym2]].tail())

只要您將兩個數據集都存儲為具有公共索引(具有相同數據類型)的數據幀,就可以像這樣使用pd.merge()

df2 = pd.merge(df, ff, how='left',left_index = True, right_index = True)

最終數據框中的缺失值取決於您的數據集以及how''left how='left'部分指定的加入方式。 下面是一個基於4個隨機序列構建的示例,它們被連接(簡單合並)兩個一個,然后連接成一個具有一些缺失值的數據幀。

使用left_index = True, right_index = True將指定它們在您的日期索引上合並。 我更喜歡這樣做,因為你的例子似乎想要使用日期索引。 就像你在問題的標題中所說的那樣,你想用任意列合並數據,你可以使用on來指定它們。 但這並不是必需的,因為很明顯你在日期中合並數據,並且存儲它們的自然方式是數據框中的索引。

片段:

# Imports
import pandas as pd
import numpy as np

# sample data
np.random.seed(123)
AAPL = pd.Series(np.random.randn(100),index=pd.date_range('1/1/2000', periods=100)).cumsum()
AMZN = pd.Series(np.random.randn(100),index=pd.date_range('1/1/2000', periods=100)).cumsum()
MSFT = pd.Series(np.random.randn(100),index=pd.date_range('3/1/2000', periods=100)).cumsum()
RNDM = pd.Series(np.random.randn(100),index=pd.date_range('3/1/2000', periods=100)).cumsum()

# two dataframes with a common index
df = pd.concat([AAPL, AMZN], axis = 1)
df.columns = ['AAPL', 'AMZN']
ff = pd.concat([MSFT, RNDM], axis = 1)
ff.columns = ['MSFT', 'RNDM']

# merged dataframe from two dataframes
# that do not perfectly share a common index
dfm = pd.merge(df, ff, how='left', left_index=True, right_index=True)
dfm.head()

輸出:

               AAPL      AMZN  MSFT  RNDM
2000-01-01 -1.085631  0.642055   NaN   NaN
2000-01-02 -0.088285 -1.335833   NaN   NaN
2000-01-03  0.194693 -0.623569   NaN   NaN
2000-01-04 -1.311601  1.974735   NaN   NaN
2000-01-05 -1.890202  1.950109   NaN   NaN

情節:使用dfm.plot()

在此輸入圖像描述

如您所見,MSFT和RNDM在行軍月之前沒有任何觀察結果。 那么,如何處理所有這些缺失值? 這完全取決於數據集的結構以及數據丟失的原因。 看看用seaborn繪圖時如何處理缺失值? 有關如何處理pandas數據幀中缺失數據的一些建議和簡要介紹。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM