通过拆分较大的数据框来创建动态数据框名称

时间:2019-03-05 11:10:39

标签: python pandas split

我的csv很大,想将其分成4个部分,并在循环中生成名称,例如sub0,sub1,sub2,sub3。我可以按如下常规进行拆分:

df=pd.DataFrame(np.random.randint(0,100,size=(20, 3)), columns=list('ABC'))

for i,chunk in enumerate(np.array_split(df, 4)):
    print(chunk.head(2)) #just to check
    print(chunk.tail(1)) #just to check

    sub+str(i)=chunk.copy() # this gives error

但是在最后一行分配名称的情况下,出现了 expected 错误:SyntaxError:无法分配给运算符。

问:如何通过复制循环中的每个块来获取sub0,..,sub3?谢谢!

2 个答案:

答案 0 :(得分:1)

为什么要在循环中创建变量?

  • 它们是不必要的:您可以将所有内容存储在列表或任何其他类型的集合中
  • 很难创建和重用它们:您必须使用exec或globals()

使用列表要容易得多:

subs = []
for chunk in np.array_split(df, 10):
        print(chunk.head(2)) #just to check
        print(chunk.tail(1)) #just to check
        subs.append(chuck.copy())

答案 1 :(得分:1)

最好的方法是使用动态名称作为键来创建dict

chunks = {f'{sub}{i}':chunk for i, chunk in enumerate(np.array_split(df, 10))}

如果您绝对坚持将框架作为单独的变量创建,则可以将其分配给globals()字典,但是建议使用此方法:

for i, chunk in enumerate(np.array_split(df, 10)):
    globals()['{}{}'.format(sub, i)] = chunk