Pandas 将多个词典添加到单个数据帧中

Pandas 将多个词典添加到单个数据帧中,pandas,Pandas,我有一套python字典,是通过for循环获得的。我正在尝试将这些添加到熊猫数据帧中 名为Output的变量的输出 我试图将这些字典中的每一个附加到一个数据帧中。我试图执行下面的操作,但它只是添加了第一行 df = pd.DataFrame(output) 有谁能告诉我哪里出了问题,并将所有字典添加到数据框中 循环语句的更新 下面的代码有助于读取xml并将其转换为数据帧。现在,我看到我能够循环浏览多个xml文件,并为每个xml文件创建字典。我试图了解如何将这些字典添加到单个数据帧: def f

我有一套python字典,是通过for循环获得的。我正在尝试将这些添加到熊猫数据帧中

名为Output的变量的输出

我试图将这些字典中的每一个附加到一个数据帧中。我试图执行下面的操作,但它只是添加了第一行

df = pd.DataFrame(output)
有谁能告诉我哪里出了问题,并将所有字典添加到数据框中

循环语句的更新

下面的代码有助于读取xml并将其转换为数据帧。现在,我看到我能够循环浏览多个xml文件,并为每个xml文件创建字典。我试图了解如何将这些字典添加到单个数据帧:

def f(elem, result):
    result[elem.tag] = elem.text
    cs = elem.getchildren()
    for c in cs:
        result = f(c, result)
    return result

    result = {}
    for file in allFiles:
        tree = ET.parse(file)
        root = tree.getroot()
        result = f(root, result)
        print(result)

您可以将每个字典附加到list和last call DataFrame构造函数:

out = []
for file in allFiles:
    tree = ET.parse(file)
    root = tree.getroot()
    result = f(root, result)
    out.append(result)

df = pd.DataFram(out)

您可以将每个字典附加到list和last call DataFrame构造函数:

out = []
for file in allFiles:
    tree = ET.parse(file)
    root = tree.getroot()
    result = f(root, result)
    out.append(result)

df = pd.DataFram(out)

我们可以将以下内容添加到列表中:

ds = []
for ...:      # your loop
    ds += [d] # where d is one of the dicts
当我们有DICT列表时,我们可以简单地在该列表上使用pd.DataFrame:

ds = [
    {'name':'Kevin','age':21},
    {'name':'Steve','age':31},
    {'name':'Mark','age':11}
]
pd.DataFrame(ds)
输出:

    name  age
0  Kevin   21
1  Steve   31
2   Mark   11
   age favorite_food location   name
0   21           NaN      NaN  Kevin
1   31           NaN       NY  Steve
2   11         pizza      NaN   Mark
更新: 如果不同的dict有不同的键,这不是问题,例如:

ds = [
    {'name':'Kevin','age':21},
    {'name':'Steve','age':31,'location': 'NY'},
    {'name':'Mark','age':11,'favorite_food': 'pizza'}
]
pd.DataFrame(ds)
输出:

    name  age
0  Kevin   21
1  Steve   31
2   Mark   11
   age favorite_food location   name
0   21           NaN      NaN  Kevin
1   31           NaN       NY  Steve
2   11         pizza      NaN   Mark
更新2: 在我们之前的讨论的基础上,我们可以做到:

results = []
for file in glob.glob('*.xml'):
    tree = ET.parse(file)
    root = tree.getroot()
    result = f(root, {})
    result['filename'] = file # added filename to our results
    results += [result]

pd.DataFrame(results)

我们可以将以下内容添加到列表中:

ds = []
for ...:      # your loop
    ds += [d] # where d is one of the dicts
当我们有DICT列表时,我们可以简单地在该列表上使用pd.DataFrame:

ds = [
    {'name':'Kevin','age':21},
    {'name':'Steve','age':31},
    {'name':'Mark','age':11}
]
pd.DataFrame(ds)
输出:

    name  age
0  Kevin   21
1  Steve   31
2   Mark   11
   age favorite_food location   name
0   21           NaN      NaN  Kevin
1   31           NaN       NY  Steve
2   11         pizza      NaN   Mark
更新: 如果不同的dict有不同的键,这不是问题,例如:

ds = [
    {'name':'Kevin','age':21},
    {'name':'Steve','age':31,'location': 'NY'},
    {'name':'Mark','age':11,'favorite_food': 'pizza'}
]
pd.DataFrame(ds)
输出:

    name  age
0  Kevin   21
1  Steve   31
2   Mark   11
   age favorite_food location   name
0   21           NaN      NaN  Kevin
1   31           NaN       NY  Steve
2   11         pizza      NaN   Mark
更新2: 在我们之前的讨论的基础上,我们可以做到:

results = []
for file in glob.glob('*.xml'):
    tree = ET.parse(file)
    root = tree.getroot()
    result = f(root, {})
    result['filename'] = file # added filename to our results
    results += [result]

pd.DataFrame(results)


输出的类型是什么?printtypeoutput@anky_91,从字典中存储这些值的Dataframe可能重复@anky_91,其输出类型是什么?printtypeoutput@anky_91,Dataframe,用于存储字典中的这些值@anky_91的可能重复项感谢您的帮助。我尝试了您上面提到的第一种方法,发现我只能将标题列返回到Dataframe dfI。我遇到了这样的问题,即将来我将在具有不同标题列的不同文件中运行此操作,因此我无法定义每次的标题列。@codinglearner-因此在lopp不可能创建字典列表?添加了loop语句,我正在努力克服。但是,我无法将其添加到数据帧。希望这对您有所帮助。@codinglearner-这更好,也可以添加一些数据样本来处理您的代码?谢谢您的帮助。我尝试了您上面提到的第一种方法,发现我只能将标题列返回到Dataframe dfI。我遇到了这样的问题,即将来我将在具有不同标题列的不同文件中运行此操作,因此我无法定义每次的标题列。@codinglearner-因此在lopp不可能创建字典列表?添加了loop语句,我正在努力克服。但是,我无法将其添加到数据帧。希望这对您有所帮助。@codinglearner-这更好,也可以添加一些数据样本来处理您的代码?谢谢您的帮助。我将从您帮助我构建xml到csv转换器的另一张票继续。因为这是一个新的问题,我提出了一个新的罚单。我有来自每个xml文件的多个字典,但现在尝试将它们添加到DataFrame我尝试通过执行以下ds=[]for I in result:ds+=[I]printds将所有dict添加到列表中。上面将dict转换为列表,而不是列表中的dict,如下所示。示例输出:['name':'Kevin','age':21]['name':'Steve','age':31]['name':'Mark','age':11]好的,让我澄清一下,每一步我们都会得到一个类似{'name':'Kevin',…}的命令,对吗?好的,太好了,你能检查一下更新2的代码吗?在结果中添加了文件名和结果['filename']=文件已将文件名添加到我们的结果中感谢您的帮助。我将从您帮助我构建xml到csv转换器的另一张票继续。因为这是一个新的问题,我提出了一个新的罚单。我有来自每个xml文件的多个字典,但现在尝试将它们添加到DataFrame我尝试通过执行以下ds=[]for I in result:ds+=[I]printds将所有dict添加到列表中。上面将dict转换为列表,而不是列表中的dict,如下所示。示例输出:['name':'Kevin','age':21]['name':'Steve','age':31]['name':'Mark','age':11]好的,让我澄清一下,每一步我们都会得到一个类似{'name':'Kevin',…}的命令,对吗?好的,太好了,你能检查更新2中的代码吗?在结果中添加文件名,结果为['filename']=文件添加文件名到我们的结果中