Создайте динамическое имя фрейма данных, разделив его на более крупный - PullRequest
1 голос
/ 05 марта 2019

Я имею большой 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

Но при назначении имен в последней строке я получаю ожидаемую ошибку: SyntaxError: невозможно назначить оператору.

В: как получить sub0, .., sub3 путем копирования каждого фрагмента в цикле? Спасибо!

Ответы [ 2 ]

1 голос
/ 05 марта 2019

Лучший способ - создать 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
1 голос
/ 05 марта 2019

Зачем вам создавать переменные в цикле?

  • Они не нужны: вы можете хранить все в списках или любом другом типе коллекции
  • Их сложно создавать и использовать повторно: вы должны использовать 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())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...