在for循环中从json文件追加数据帧

时间:2019-07-19 18:53:44

标签: python pandas dataframe jupyter-notebook

我正在尝试遍历文件夹中的json文件,并将它们全部附加到一个pandas数据框中。

如果我说

import pandas as pd
import numpy as np
import json
from pandas.io.json import json_normalize
import os


directory_in_str = 'building_data'
directory = os.fsencode(directory_in_str)

df_all = pd.DataFrame()
with open("building_data/rooms.json") as file:
  data = json.load(file)
df = json_normalize(data['rooms'])
df_y.append(df, ignore_index=True)

我从一个文件中得到一个包含数据的数据框。如果我将这种想法变成for循环,我就尝试过

import pandas as pd
import numpy as np
import json
from pandas.io.json import json_normalize
import os

directory_in_str = 'building_data'
directory = os.fsencode(directory_in_str)

df_all = pd.DataFrame()
for file in os.listdir(directory):
    with open(directory_in_str+'/'+filename) as file:
        data = json.load(file)
    df = json_normalize(data['rooms'])
    df_all.append(df, ignore_index=True)

print(df_all)

这将返回一个空的数据框。有人知道为什么会这样吗?如果我在附加之前打印df,它将打印正确的值,所以我不确定为什么不附加。

谢谢!

2 个答案:

答案 0 :(得分:0)

在这些情况下,我通过将每个文件的返回字典附加到列表中,将json中的所有内容加载到列表中。然后,我将列表传递给class My_component extends React.Component { state = {}; componentDidMount(){ this.get_data() } get_data = async () => { const data = await o(url, options).get('foo').query({}); this.setState({ data }); } render() { const { data } = this.state; return <PivotGrid dataSource={data} /> } docs

在这种情况下,源将变成类似...

pandas.DataFrame.from_records

答案 1 :(得分:0)

我将尝试像这样添加它们,而不是追加下一个DataFrame:

if df_all.empty:
    df_all = df
else:
    df_all = df_all.join(df)

在联接DataFrame时,可以指定应联接的对象-索引还是特定的(键)列,以及联接方式(默认选项类似于附加-'left')。

有关pandas.DataFrame.join的文档。