Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用预定义的命名约定将单个数据帧划分为多个csv文件_Python_Pandas_Csv_Dataframe - Fatal编程技术网

Python 使用预定义的命名约定将单个数据帧划分为多个csv文件

Python 使用预定义的命名约定将单个数据帧划分为多个csv文件,python,pandas,csv,dataframe,Python,Pandas,Csv,Dataframe,我面临一个问题,我必须加载一个巨大的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

我面临一个问题,我必须加载一个巨大的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
我必须根据地点、类型和区域将这个大熊猫数据框归档为多个熊猫数据框,输出数据框应转换为多个csv文件,命名约定为place\u type\u product\u zone.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)
输出

在这里-

# 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)
输出


您是否必须为产品、类型和地点的每个独特组合创建csv?是的。我必须使用上述命名约定为每个组合创建单独的csv。您是否必须为每个产品、类型和地点的独特组合创建csv?是的。我将不得不使用上述命名约定为每个组合创建一个单独的csv。如果您运行此操作,我会看到有许多额外的空文件正在创建。想象一棵树正在被创造。原始df被划分为具有4个唯一区域的数据帧,这4个数据帧在产品上被拆分,生成的产品数据帧被拆分为类型。我希望我在这里说得很清楚。@Matt通过检查
形状的
if
语句解决了这个问题。
@Matt您可以通过嵌套而不是组合使用过滤器来处理它。如果这有帮助,您可以通过单击灰色的勾号向上投票/接受作为答案。如果其他人正在搜索类似的内容,这会对他们有所帮助。如果您运行此程序,我会看到正在创建大量其他空文件。想象一棵树正在被创造。原始df被划分为具有4个唯一区域的数据帧,这4个数据帧在产品上被拆分,生成的产品数据帧被拆分为类型。我希望我在这里说得很清楚。@Matt通过检查
形状的
if
语句解决了这个问题。
@Matt您可以通过嵌套而不是组合使用过滤器来处理它。如果这有帮助,您可以通过单击灰色的勾号向上投票/接受作为答案。如果其他人正在寻找类似的东西,它会帮助他们