python - 按指定列合并来自多个数据框的列

标签 python pandas

我正在研究时间序列,我在 csv 文件中有 10 个不同的股票价格。我想要做的只是将它们的收盘价转储到数据框中,并用股票名称命名该列。

我是手动完成的,但应该有更好的方法。我还有所有其他专栏。这是我到目前为止所做的。我需要它们按日期匹配。如果其中一个错过了另一个的日期,它应该有 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())

最佳答案

只要您将两个数据集存储为具有公共(public)索引(相同数据类型)的数据帧,就可以使用 pd.merge()像这样:

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

最终数据框中的缺失值将取决于您的数据集以及您如何加入由 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():

enter image description here

如您所见,MSFT 和 RNDM 在 3 月份之前没有任何观察结果。那么,如何处理所有这些缺失值呢?这完全取决于数据集的结构和数据丢失的原因。看看What to do with missing values when plotting with seaborn?有关如何处理 pandas 数据帧中缺失数据的一些建议和简要介绍。

关于python - 按指定列合并来自多个数据框的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54889729/

相关文章:

python - 带有第三个变量的 Seaborn 条形图标签条

python - pickle 图像对象?

python - 在 Pandas 的一个聚合中使用多个 idxmin() 和 idmax() 进行多重索引

python - Pandas python - 匹配值

python - NodeJS APN 推送重复的通知

python - BeautifulSoup 从 Google 获取 <cite> 标签

python - 将 pandas 日期时间索引向前设置一天

python - 合并列,如果值不相同,则使用 pandas 取任何非空值

python - 在 Pandas 中压平多层嵌套 JSON 并导出为 CSV

python - Mysql Python eof 然后在获取更多数据后返回