python - 使用预定义的命名约定将单个熊猫数据框划分为多个 csv 文件
问题描述
我面临一个问题,我必须加载一个巨大的 CSV 文件,根据列中的唯一值将文件拆分为多个文件,并将文件输出到具有预定义名称模式的多个 Csv。
原始 CSV 的示例如下。
date place type product value zone
09/10/16 NY Zo shirt 19 1
09/10/16 NY Mo jeans 18 2
09/10/16 CA Zo trouser 13 3
09/10/16 CA Co tie 17 4
09/10/16 WA Wo bat 11 1
09/10/16 FL Zo ball 12 2
09/10/16 NC Mo belt 13 3
09/10/16 WA Zo buckle 15 4
09/10/16 WA Co glass 16 1
09/10/16 FL Zo cup 19 2
我必须根据地点、类型和区域将这个庞大的 pandas 数据帧归档为多个 pandas 数据帧,并且输出数据帧应使用命名约定 place_type_product_zone.csv 转换为多个 csv 文件。
到目前为止我得到的代码如下。
def list_of_dataframes(df, col_list):
df_list = [df]
name_list = []
for _, i in enumerate(col_list):
df_list, names = _split_dataframes(df_list, i)
file_name = zip(name_list, df)
_ = dict(zip(names, df))
for k, v in _:
v.to_csv("{0}.csv".format(k))
Print("CSV files created")
return df, file_name
def _split_dataframes(df_list, col):
names = []
dfs = []
for df in df_list:
for c in df[col].unique():
dfs.append(df.loc[df[col] == c])
names.append(c)
return dfs, names
list_of_dataframes(df,['place','type','zone']
它输出标题为 1.csv、2.csv 等的 csv 文件。如何在函数中创建一个循环以获取命名约定为 NY_zo_shirt_1.csv、CA_Zo_trouser_3.csv 等。我是否应该创建一个存储所有内容的字典按键?
提前致谢。
解决方案
这里是 -
# Part 1
places = df['place'].unique()
types = df['type'].unique()
products = df['product'].unique()
zones = df['zone'].unique()
# Part 2
import itertools
combs = list(itertools.product(*[places, types, products, zones]))
#Part 3
for comb in combs:
place, type_, prod, zone = comb
df_subset = df[(df['place']==place) & (df['type']==type_) & (df['product']==prod) & (df['zone']==zone)]
if df_subset.shape[0] > 0:
df_subset.to_csv('temp1/{}_{}_{}_{}.csv'.format(place, type_, prod, zone), index=False)
输出
推荐阅读
- c# - docker容器之间的HTTPS通信问题
- c# - HttpClient PostAsync 抛出异常
- c - 是否可以在 bison.yh 文件中暴露 yyin ?
- python - 在二维列表或数组中找到最接近的距离值?
- c# - 团结 | 找不到类型或命名空间名称“Google”
- python - PyMongo 替换嵌套文档中的字符串
- prolog - 谓词 solve/2 它的第一个参数是非空列表,第二个参数是由第一个参数的零个或多个附加副本组成的列表
- python - 我需要用 100000 个点在 python turtle 中绘制一个图
- java - 目标是为给定字符串写下一个方法,该方法通过它们在字典中的外观返回一个字符串数组
- typescript - 无法在量角器打字稿代码中跳出循环