我在一个文件夹中有大约100个.csv股票文件和一些虚拟数据。
它们被命名为AA.csv, BB.csv, CC.csv.....
文件名"AA"BB"CC"这里是符号。每个数据帧都有一个符号。这里我们有100个符号
Date Open High Low Close Adj Close Volume
2014-09-02 38.849998 38.990002 38.580002 38.740002 35.522366 6196200
2014-09-03 38.779999 38.965000 38.349998 38.395000 35.206020 6796800
2014-09-04 38.400002 38.685001 38.380001 38.580002 35.375645 5741000
我想把100个数据帧合并成一个数据帧。最终的数据框将有101列。
一个日期列,100个符号各一列,这一列将包含我们为该符号计算的返回值。我想要合并,这样它只包含跨符号的日期的交集。
我知道我们可以通过读取每个csv文件并将它们组合成一个信号数据帧来使用concat。但我想这样做使用"合并"。这可能吗?我该怎么做呢?
您可以使用pandas。merge根据关键字"日期"合并数据。您可能想要合并两dataframes多,您可以使用functools.reduce。
假设您从CSV文件中读取的数据如下所示。
import pandas as pd
df_1 = pd.DataFrame({
"Date": ["2014-09-02", "2014-09-03", "2014-09-04"],
"Open": [38.849998, 38.779999, 38.400002]
})
df_2 = pd.DataFrame({
"Date": ["2014-09-02", "2014-09-03", "2014-09-04"],
"High": [38.990002, 38.965000, 38.685001]
})
df_3 = pd.DataFrame({
"Date": ["2014-09-02", "2014-09-03", "2014-09-04"],
"Low": [38.580002, 38.349998, 38.380001]
})
dfs = [df_1, df_2, df_3]
你可以这样做:
import pandas as pd
from functools import reduce
df = reduce(lambda left, right: pd.merge(left, right, on=['Date'],
how='outer'), dfs)
df则为:
Date Open High Low
0 2014-09-02 38.849998 38.990002 38.580002
1 2014-09-03 38.779999 38.965000 38.349998
2 2014-09-04 38.400002 38.685001 38.380001
您还应该阅读pandas文档中关于'how'参数的文档。