Python 从dict创建数据帧
首先,创建一个包含一些值的列表:Python 从dict创建数据帧,python,dataframe,Python,Dataframe,首先,创建一个包含一些值的列表: list = ['SBSP3.SA', 'CSMG3.SA', 'CGAS5.SA'] 我创建了一个空字典,因为这是我找到它的唯一方法,可以读取我想要作为数据帧的几个.csv文件。然后我执行for循环,将.csv文件存储在空字典中: d = {} d = {ticker: pd.read_csv('{}.csv'.format(ticker)) for ticker in list} 之后,我只能通过使用字典键传递切片来调用dataframe: d['SB
list = ['SBSP3.SA', 'CSMG3.SA', 'CGAS5.SA']
我创建了一个空字典,因为这是我找到它的唯一方法,可以读取我想要作为数据帧的几个.csv文件。然后我执行for循环,将.csv文件存储在空字典中:
d = {}
d = {ticker: pd.read_csv('{}.csv'.format(ticker)) for ticker in list}
之后,我只能通过使用字典键传递切片来调用dataframe:
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)中抛出的所有这些数据帧(axis=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
不要使用
list
作为变量名,它会隐藏实际内置的list
您不需要字典,一个简单的列表就足以存储所有数据帧
调用此列表-它应该正确地将数据帧一个接一个地连接起来,只要它们具有相同的列名
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\u list,ignore\u index=True)
。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)
输出(带我的数据):
提示:您可能需要编辑/删除您的评论。因为我更喜欢覆盖我以前的答案,而不是添加新答案。运行时:df=pd.concat(pd_list,axis=1),我会丢失ticker_list中的所有值名称,并且我不知道谁是没有ticker名称的列。字典由键和值组成。有没有其他方法可以知道哪个条目属于哪个csv文件?我想在专栏中指出他们…@leonardo henriques:既然你两次发布了同一个问题:看,并将另一个问题标记为已回答,我很好奇你最终在寻找哪种解决方案。
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