首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数据文件列表中的每个数据文件添加到另一个数据文件列表中

将数据文件列表中的每个数据文件添加到另一个数据文件列表中
EN

Stack Overflow用户
提问于 2020-07-27 13:19:09
回答 3查看 56关注 0票数 1

我从一个大数据帧中分离出2组数据帧。比如说,

代码语言:javascript
复制
    import pandas as pd, numpy as np

   np.random.seed([3,1415])
ind1 = ['A_p','B_p','C_p','D_p','E_p','F_p','N_p','M_p','O_p','Q_p']
col1 = ['sap1','luf','tur','sul','sul2','bmw','aud']
df1  = pd.DataFrame(np.random.randint(10, size=(10, 7)), columns=col1,index=ind1)
ind2 = ['G_l','I_l','J_l','K_l','L_l','M_l','R_l','N_l']
col2 = ['sap1','luf','tur','sul','sul2','bmw','aud']
df2  = pd.DataFrame(np.random.randint(20, size=(8, 7)), columns=col2,index=ind2)

# Split the dataframes into two parts 
pc_1,pc_2   = np.array_split(df1, 2)
lnc_1,lnc_2 = np.array_split(df2, 2)

现在,我需要将来自df1 (pc1, pc2)的每个分离数据帧与来自df2 (ln_1,lnc_2)的每个数据帧连接起来。目前,我正在做以下工作,

代码语言:javascript
复制
# concatenate each split data frame pc1 with lnc1

pc1_lnc_1 =pd.concat([pc_1,lnc_1])
pc1_lnc_2 =pd.concat([pc_1,lnc_2])
pc2_lnc1  =pd.concat([pc_2,lnc_1])
pc2_lnc2  =pd.concat([pc_2,lnc_2])

在每个级联的数据帧上,我需要运行一个相关分析函数,例如,

代码语言:javascript
复制
correlation(pc1_lnc_1)

和我想单独保存结果,例如,

代码语言:javascript
复制
  pc1_lnc1=   correlation(pc1_lnc_1)
  pc1_lnc2=   correlation(pc1_lnc_2)
     ......

  pc1_lnc1.to_csv(output,sep='\t')

问题是,是否有一种方法可以使上述级联部分自动化,而不是使用某种循环(目前用于每个级联数据帧)在每一行中对其进行编码。我正在单独运行函数correlation。我有一个很长的分离数据框架的列表。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-07-27 14:10:17

这是另一个想法

代码语言:javascript
复制
def correlation(data):
    # do some complex operation..
    return data

# {"pc_1" : split_1, "pc_2" : split_2}
pc = {f"pc_{i + 1}": v for i, v in enumerate(np.array_split(df1, 2))}
lc = {f"lc_{i + 1}": v for i, v in enumerate(np.array_split(df2, 2))}

for pc_k, pc_v in pc.items():
    for lc_k, lc_v in lc.items():
        # (pc_1, lc_1), (pc_1, lc_2) ..
        correlation(pd.concat([pc_v, lc_v])). \
            to_csv(f"{pc_k}_{lc_k}.csv", sep="\t", index=False)

# will create csv like pc_1_lc_1.csv, pc_1_lc_2.csv.. in the current working dir
票数 1
EN

Stack Overflow用户

发布于 2020-07-27 13:23:41

您可以遍历拆分的数据文件:

代码语言:javascript
复制
for pc in np.array_split(df1, 2):
    for lnc in np.array_split(df2, 2):
         print(correlation(pd.concat([pc,lnc])))
票数 3
EN

Stack Overflow用户

发布于 2020-07-27 13:29:00

如果数组中没有单独的数据格式(假设您有一个非平凡的数据格式),最简单的方法(只要进行最小的代码修改)就是使用一个循环抛出一个eval。

有点像

代码语言:javascript
复制
for counter in range(0,n):
    for counter2 in range(0:n);
        exec("pc{}_lnc{}=correlation(pd.concat([pc_{},lnc_{}]))".format(counter,counter2,counter,counter2))

        eval("pc{}_lnc{}.to_csv(filename,sep='\t')".format(counter,counter2)

围绕eval的标准免责声明仍然适用(不要这样做,因为它是懒散的编程实践,而不安全的输入可能会导致代码中的各种问题)。

有关为什么使用伊瓦尔很坏的更多细节,请参见这里

编辑更新答案以回答更新的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63116217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档