Как создать несколько фреймов данных, используя цикл for в python

Я пытаюсь создать несколько фреймов данных, которые являются подмножествами существующих фреймов данных.

У меня есть df_list, который на самом деле представляет собой список наборов данных:

df_list = [df1B, df2B, df3B, df4B, df5B, df6B, df7B, df8B, df9B, df10B, df11B, df12B, df13B, df14B, df15B, df16B, df17B, df18B, df19B, df20B, df21B, df22B, df23B, df24B, df25B, df26B, df27B, df28B, df30B, df31B, df32B, df33B, df34B, df35B]

Если я хочу создать подмножество одного набора данных, я делаю это, и это работает:

df2B = df2B.groupby(['Location']).get_group(36)

Он принимает все местоположения с номером 36, но когда я пытаюсь сделать это для всех наборов данных в цикле for, это не работает.

for df in df_list:
    df = df.groupby(['Location']).get_group(36)

Но это не для каждого набора данных. Он не показывает никаких сообщений об ошибках, но и ничего не делает :(

Должен ли я просто написать одну и ту же строку 35 раз ??? Надеюсь, у меня есть лучший вариант.

Вы хотите, чтобы после цикла имя df1B указывало на подмножество? Когда вы создаете подмножество df1B, вы хотите иметь возможность ссылаться на это подмножество с именем df1B?

wwii 29.05.2019 04:56

с чем имя или любой другой новый :)

Diana Vega 29.05.2019 05:03

Возможно, вам следует описать, что вы ожидаете от конечного результата.

pglezen 29.05.2019 05:04

Конечным результатом должен быть список наборов данных, которые являются подмножеством python df_list

Diana Vega 29.05.2019 05:08
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
4
1 052
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Если я правильно понимаю, вы можете использовать для этого понимание list:

subset_df_list = [df.groupby('Location').get_group(36) for df in df_list]

Кроме того, ваш цикл for не работает, потому что вы просто продолжаете присваивать df. Вы, вероятно, хотите этого, что также эквивалентно приведенному выше пониманию:

subset_df_list = []

for df in df_list:
    subset_df = df.groupby('Location').get_group(36)
    subset_df_list.append(subset_df)

Большое спасибо! оба варианта сработали для меня, теперь я лучше понимаю концепцию ... Итак, когда я хочу вызвать любое из подмножеств, я просто называю их так? python subset_df_list[i]

Diana Vega 29.05.2019 05:04

@DianaVega Да, это правильно, за исключением того, что ты не вызов, а доступ. Между прочим, блоки кода (с 3 ```) не работают в комментариях.

gmds 29.05.2019 05:06
df = [pd.DataFrame({'Location': np.random.randint(0,5,size=(100))}) for i in range(10)]
df = list(map(lambda x: x.groupby('Location').get_group(1), df))

Вы присваиваете свою переменную цикла, которая затем отбрасывается при следующем обходе. DataFrame.append не является inplace и не имеет параметра inplace. Вместо:

df1 = pd.DataFrame({'gr': [1,1,2,2], 'v': [1,2,3,2]})
df2 = pd.DataFrame({'gr': [1,1,2,2], 'v': [6,5,4,3]})
df_combined = pd.DataFrame({'gr': [], 'v':[]})
df_combined
Empty DataFrame
Columns: [gr, v]
Index: []
for df in [df1, df2]:
    df_combined = df_combined.append(df.groupby('gr').get_group(1))
df_combined
#     gr    v
# 0  1.0  1.0
# 1  1.0  2.0
# 0  1.0  6.0
# 1  1.0  5.0

Если только вам не нужен список DataFrames, что внезапно кажется вам нужным. (Меня бросил df.append(). Для listappend добавляется в конец на месте. Для DataFrame это не так. В случае списка вы хотите:

# setup as before
combined_dfs = []
for df in [df1, df2]:
    combined_dfs = df_combined.append(df.groupby('gr').get_group(1))

Это забавный способ использования DataFrames, но вот! :D

append в моем ответе — это list.append, а не pd.DataFrame.append, и то, что хочет ОП, — это list из DataFrames, а не один единственный DataFrame.

gmds 29.05.2019 05:07

Я только что понял это и отредактировал прямо перед тем, как ты прокомментировал, @gmds. Извиняюсь!

Mike 29.05.2019 05:08

Другие вопросы по теме