在Pandas

时间:2018-04-25 17:14:24

标签: pandas dictionary dataframe

我设置了一个dict'd',这是一个数据帧列表,例如:

d["DataFrame1"]

将返回该数据框及其所有列:

    ID    Name
0  123    John
1  548    Eric
2  184    Sam
3  175    Andy

每个数据框都有一个名为“Names”的列。我想从dict中的每个数据帧中提取此列,并创建一个由这些列组成的新数据帧。

df_All_Names = pd.DataFrame()

for df in d:
     df_All_Names[df] = df['Names']

返回错误:

  

TypeError:字符串索引必须是整数

不确定我在哪里出错。

2 个答案:

答案 0 :(得分:1)

例如,你有df如下

df=pd.DataFrame({'Name':['X', 'Y']})
df1=pd.DataFrame({'Name':['X1', 'Y1']})

我们创建了一个dict

d=dict()
d['df']=df
d['df1']=df1

然后预设空数据框:

yourdf=pd.DataFrame()

items与for循环

一起使用
for key,val in d.items():
    yourdf[key]=val['Name']

产量:

yourdf
Out[98]: 
  df df1
0  X  X1
1  Y  Y1

答案 1 :(得分:0)

您可以使用reduce并连接数据框字典中名为['Name']的所有列

样本数据

from functools import reduce
d = {'df1':pd.DataFrame({'ID':[0,1,2],'Name':['John','Sam','Andy']}),'df2':pd.DataFrame({'ID':[3,4,5],'Name':['Jen','Cara','Jess']})}

您可以使用axis=1

并排堆叠数据
reduce(lambda x,y:pd.concat([x.Name,y.Name],axis=1),d.values())

   Name  Name
0  John   Jen
1   Sam  Cara
2  Andy  Jess

或使用axis=0

在另一个之上
reduce(lambda x,y:pd.concat([x.Name,y.Name],axis=0),d.values())

0    John
1     Sam
2    Andy
0     Jen
1    Cara
2    Jess