我正在尝试遍历文件夹中的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
,它将打印正确的值,所以我不确定为什么不附加。
谢谢!
答案 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的文档。