python - 将指定目录中的文件导入到单独的 pandas 数据帧中(并相应地命名它们)
问题描述
在 Win-server 下的子目录中组织的文件夹中有很多 .csv 文件。它们在每个目录中具有不同的结构/大小/编号。需要将它们全部挑出到不同的数据帧中,对应命名并jsonize每个数据帧:
import glob
import pandas as pd
singlefile = [pd.read_csv(filename) for filename in glob.glob("C:\data\*.csv")]
#this will read them all into the same DataFrame
df = pd.concat(singlefile, axis=0)
...
#and finally dump it into predefined singlefile.json
df.to_json("C:\data\singlefile.json")
如何修改它以便将它们解析为不同的数据帧,然后转储到不同的 json 中?
- 挑选出目录中的所有文件名,直到 !eof();
- 遍历要导入 DF 的文件列表并为其分配唯一名称;- 不覆盖同一个df中的数据;
- 将每个导出为单独的 json;
解决方案
根据您是需要将数据保留在内存中还是只需要 JSON 文件,我建议使用以下方法:
如果您只需要 JSON 文件:按顺序执行所有操作(在写入 JSON 后覆盖 DataFrame)
import glob
import pandas as pd
filenames = glob.glob("C:\data\*.csv")
for idx, fname in enumerate(filenames):
df = pd.read_csv(fname)
out_fname = os.path.splitext(os.path.basename(fname))[0]
...
# and finally dump it into predefined singlefile.json
df.to_json("C:\data\df_{}.json".format(out_fname))
如果您需要在内存中保留所有 DataFrame:使用字典
import glob
import pandas as pd
filenames = glob.glob("C:\data\*.csv")
df_dict = {}
for idx, fname in enumerate(filenames):
df_dict[fname] = pd.read_csv(fname)
out_fname = os.path.splitext(os.path.basename(fname))[0]
...
#and finally dump it into predefined singlefile.json
df_dict[fname].to_json("C:\data\df_{}.json".format(out_fname))
现在您可以通过文件名作为键来访问每个 DataFrame。现在,JSON 与派生它们的 CSV 具有相同的名称。例如,如果 csv 被称为“data_foo.csv”,那么 JSON 将被称为“data_foo.json”。
推荐阅读
- java - 使用 JPA 的域对象中的注释违反了数据库是一个细节
- ms-access - 根据周和年标准选择最新日期
- php - RabbitMQ:如何将失败的消息从一个队列移动到另一个队列?
- ruby-on-rails - Rails - extract substring with in [ and ] from string
- excel - 一次选择多个动态范围
- swift - 如何在 Xcode 中对条件 inn if 和 guard 语句进行列对齐
- c# - 尝试访问 ASP.Net 中捆绑的 slick.css 文件时出现“禁止错误”
- android - Unity 无法构建并显示 android 的 gradle 错误
- javascript - "href" 参数仅在鼠标悬停时
- ios - setAlternateIconName 是否也会更改 Apple Watch 配套应用程序/汽车游戏上的应用程序图标?