首先从创建具有一些值的列表开始:
list = ['SBSP3.SA', 'CSMG3.SA', 'CGAS5.SA']
我创建了一个空字典,因为这是我找到它的唯一方法,它可以读取我想要作为数据帧的几个.csv文件。然后,我执行一个for循环,将.csv文件存储在空字典中:
d = {}
d = {ticker: pd.read_csv('{}.csv'.format(ticker)) for ticker in list}
之后,我只能通过使用字典键传递切片来调用数据帧:
d['SBSP3.SA'].head(5)
Date High Low Open Close Volume Adj Close
0 2017-01-02 14.70 14.60 14.64 14.66 7525700.0 13.880955
1 2017-01-03 15.65 14.95 14.95 15.50 39947800.0 14.676315
2 2017-01-04 15.68 15.31 15.45 15.50 37071700.0 14.676315
3 2017-01-05 15.91 15.62 15.70 15.75 47586300.0 14.913031
4 2017-01-06 15.92 15.50 15.78 15.66 25592000.0 14.827814
我不能举例:
df = pd.DataFrame(d)
我的问题是:
我可以合并我在字典(d)中使用轴= 1抛出的所有这些数据帧以将其视为一个吗?
在这里,我大吃一惊,我设法将所有数据框放在一起,但是我丢失了它们的密钥,由于列的名称相同,所以我无法区分谁是谁。
我可以在列中命名这些键吗?
示例:
Date High_SBSP3.SA Low_SBSP3.SA Open_SBSP3.SA Close_SBSP3.SA Volume_SBSP3.SA Adj Close_SBSP3.SA
0 2017-01-02 14.70 14.60 14.64 14.66 7525700.0 13.880955
1 2017-01-03 15.65 14.95 14.95 15.50 39947800.0 14.676315
2 2017-01-04 15.68 15.31 15.45 15.50 37071700.0 14.676315
3 2017-01-05 15.91 15.62 15.70 15.75 47586300.0 14.913031
4 2017-01-06 15.92 15.50 15.78 15.66 25592000.0 14.827814
答案 0 :(得分:1)
不要使用list
作为变量名,它会遮盖实际的内置list
。
您不需要字典,一个简单的列表就可以存储所有数据框。
在此列表上调用pd.concat
-只要它们具有相同的列名,它就应该正确地将数据框一个接一个地连接。
ticker_list = ['SBSP3.SA', 'CSMG3.SA', 'CGAS5.SA']
pd_list = [pd.read_csv('{}.csv'.format(ticker)) for ticker in ticker_list]
df = pd.concat(pd_list)
如果要在连接时重设索引,请使用df = pd.concat(pd_list, ignore_index=True)
。
答案 1 :(得分:0)
pd.merge 会做您想要的事情(包括重命名列),但是由于它一次只允许合并两个框架,因此在重复合并时列名将不一致。因此,您需要在之前手动重命名列。
import pandas as pd
from functools import reduce
ticker_list = ['SBSP3.SA', 'CSMG3.SA', 'CGAS5.SA']
pd_list = [pd.read_csv('{}.csv'.format(ticker)) for ticker in ticker_list]
for idx, df in enumerate(pd_list):
old_names = df.columns[1:]
new_names = list(map(lambda x : x + '_' + ticker_list[idx] , old_names))
zipped = dict(zip(old_names, new_names))
df.rename(zipped, axis=1, inplace=True)
def dfmerge(x, y):
return pd.merge(x, y, on="date")
df = reduce(dfmerge, pd_list)
print(df)
输出(带有我的数据):
date High_SBSP3.SA Low_SBSP3.SA Open_SBSP3.SA High_CSMG3.SA Low_CSMG3.SA Open_CSMG3.SA High_CGAS5.SA Low_CGAS5.SA Open_CGAS5.SA
0 2017-01-02 1 2 3 1 2 3 1 2 3
1 2017-01-03 4 5 6 4 5 6 4 5 6
2 2017-01-04 7 8 9 7 8 9 7 8 9
提示 :您可能需要编辑/删除评论。由于我更喜欢覆盖以前的答案,而不是添加一个新答案。