Я пытаюсь динамически создавать наборы данных:

def CreateDF (indsn, outdsn):
    outdsn = pd.DataFrame(indsn)
    ....
    return outdsn

CreateDF (phase_df, phase_df2)

Но не получается, появляется следующая ошибка:

NameError: имя 'phase_df2' не определено

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

-1
tezzaaa 27 Июн 2016 в 18:35
2
Ошибка довольно ясно, что здесь phase_df2, поскольку ваш фрагмент кода не показывает, где это объявлено
 – 
EdChum
27 Июн 2016 в 18:37
1
Вам нужно показать MCVE, ваш код не имеет ничего общего с получаемой вами ошибкой.
 – 
Tadhg McDonald-Jensen
27 Июн 2016 в 18:37
2
Что ж, эта ошибка не имеет ничего общего с вашей функцией. Это просто означает, что вы никогда не определяли phase2_df
 – 
SAMO
27 Июн 2016 в 18:37
Если мы возьмем пример ниже: df = pd.DataFrame (np.arange (2 * 5) .reshape (2,5)) df.columns = ['blah', 'blah2', 'blah3', 'blah', 'blah'] затем мы хотим переименовать df в dfnew ... def CreateDF (indsn, outdsn): outdsn = pd.DataFrame (indsn) return outdsn CreateDF (df, dfnew) Я надеялся, что смогу передать новое имя 'dfnew' как новое имя для df ..
 – 
tezzaaa
27 Июн 2016 в 18:41
Ошибка NameError: name 'phase_df2' is not defined означает, что переменная phase_df2 не определена, покажите нам код, который может воспроизвести эту ошибку.
 – 
Tadhg McDonald-Jensen
27 Июн 2016 в 18:48

2 ответа

Это немного скудно, потому что вы не предоставили нам информацию о том, почему это должно происходить или как выглядит ваш исходный материал, но общая идея такова:

def make_df(name):
    ...
    return df

dict_of_dfs = dict()
df_names = []        #a list of all the dataframes you want to create

for name in df_names:
    dict_of_dfs[name] = make_df(name)

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

4
Jeff 27 Июн 2016 в 18:55

Инициализировать df:

df= pd.DataFrame(index=range(0,4),columns=['A','B','C','D'], dtype='object')

Динамически добавлять:

for values in values_np
    df.set_value([iterator, 'A', values)
    iterator += 1 

Таким образом, вы можете динамически добавлять строки

0
SerialDev 27 Июн 2016 в 18:53