【问题标题】:Issue looping through dataframes in Pandas在 Pandas 中循环遍历数据框的问题
【发布时间】:2018-04-26 01:51:53
【问题描述】:

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

d["DataFrame1"]

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

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

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

df_All_Names = pd.DataFrame()

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

返回错误:

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

不确定我哪里出错了。

【问题讨论】:

  • 你想要的输出是什么?

标签: pandas dictionary dataframe


【解决方案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()

在 for 循环中使用 items

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

产量:

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

【讨论】:

  • 我不确定我是否完全遵循!
  • @CuriousStudent 因为你已经有了字典,你只需要最后一部分
  • 很有趣,它似乎正在工作 - 我需要一些时间来弄清楚它是如何工作的!谢谢
  • @CuriousStudent 您的代码尝试使用DataFrame 作为列名,但您实际上想使用字典中的键,即这是您正在做的df_All_Names[d["DataFrame1"]] = d["DataFrame1"]['Names'] 但您想做这个:df_All_Names["DataFrame1"] = d["DataFrame1"]['Names']
  • 我认为 OP 希望从字典中的每个数据帧中获取“名称”列,并创建一个独立于数据帧字典的新数据帧。也许?
【解决方案2】:

您可以使用 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

【讨论】:

    猜你喜欢
    • 2016-04-25
    • 2022-01-20
    • 1970-01-01
    • 2018-05-30
    • 2021-08-20
    • 2021-03-15
    • 2018-02-13
    相关资源
    最近更新 更多