【发布时间】:2021-07-09 20:28:55
【问题描述】:
我正在导入大量 JSON 文件。它们每年来自一个文件夹。 文件已正确导入,并作为数据框存储在列表中。我的计划是连接列表并每年导出为一个 CSV。问题是连接不起作用,因为 df 列表太长(当我尝试使用少量文件时它起作用)。我想我应该找到一种方法为每个文件夹制作一个列表,以便连接每个列表然后导出,或者找到一种方法只连接列表中具有相同年份的 df(每个 df 都有一个带有年份的列价值)。我两个都做不到,所以我需要帮助。
我的代码如下所示:
os.chdir('C:\\Users\\User\\Documents\\Local\\hs')
rootdir = 'C:\\Users\\User\\Documents\\Local\\hs'
data_df = []
files_notloading=[]
for subdir, dirs, files in os.walk(rootdir):
for file in files:
print(os.path.join(subdir, file))
if 'json' in os.path.join(subdir, file):
try:
with open(os.path.join(subdir, file),'r') as f:
data = json.loads(f.read())
if not data['search']:
data['search'] = [{'R': 0}]
# Normalizing data
df = pd.json_normalize(data, record_path =['search'],
meta =['month', 'type',
'day','year'],errors='ignore')
data_df.append(df)
except: files_notloading.append(file)
data_df = pd.concat(data_df)
files_notloading = pd.DataFrame(files_notloading)
for year in data_df['year'].unique():
file_name = '/Users/User/Documents/data/hs_{0}.csv'.format(year)
data_df[data_df['year'] == year].to_csv(file_name, index= False)
files_notloading.to_csv(path_or_buf='/Users/User/Documents/data/filesnotloading_hs.csv',index= False)
【问题讨论】:
-
查看这个关于连接大量数据帧的答案。本质上,解决方法是将数据帧的子集连接成更大的数据帧,然后将更大的数据帧连接成最终的:stackoverflow.com/a/40568957/5992438
标签: python pandas list dataframe concatenation