我不确定我在这里缺少什么,但我有2个包含json文件的zip文件,我只是想把我从文件中提取的数据组合起来并组合成一个数据帧,但我的循环一直给我单独的记录。这是我在构建DF之前所拥有的。我尝试了pd.concat,但我认为我的问题更多地与我首先阅读文件的方式有关。
data = []
for FileZips in glob.glob('*.zip'):
with zipfile.ZipFile(FileZips, 'r') as myzip:
for logfile in myzip.namelist():
with myzip.open(logfile) as f:
contents = f.readlines()[-2]
jfile = json.loads(contents)
print len(jfile)
返回:
40935
40935
答案 0 :(得分:2)
通过对我的缩进进行小调整,我能够得到我需要的东西!!
dfs = []
for FileZips in glob.glob('*.zip'):
with zipfile.ZipFile(FileZips, 'r') as myzip:
for logfile in myzip.namelist():
with myzip.open(logfile, 'r') as f:
contents = f.readlines()[-2]
jfile = json.loads(contents)
dfs.append(pd.DataFrame(jfile))
df = pd.concat(dfs, ignore_index=True)
print len(df)
答案 1 :(得分:2)
您可以使用read_json
(假设它有效 json)。
我还会将其分解为更多可读性函数:
def zip_to_df(zip_file):
with zipfile.ZipFile(zip_file, 'r') as myzip:
return pd.concat((log_as_df(loglife, myzip)
for logfile in myzip.namelist()),
ignore_index=True)
def log_as_df(logfile, myzip):
with myzip.open(logfile, 'r') as f:
contents = f.readlines()[-2]
return pd.read_json(contents)
df = pd.concat(map(zip_to_df, glob.glob('*.zip')), ignore_index=True)
注意:这会有更多的结论,但我认为它的可读性是值得的,你只能做一个连续...