Ошибка атрибута: объект ‘str’ не имеет атрибута ‘копировать’ из пользовательского ввода

#python #pandas #dataframe

#python #pandas #фрейм данных

Вопрос:

У меня есть этот фрейм данных:

 dtf = pd.DataFrame({'col1' : ['Buenos Dias'],
         'col2' : ["Hello"],
         'col3' : ["Bonjour"]})
  

Мне нужно принять имя фрейма данных пользовательского ввода, используя эту функцию, и сделать копию.
Я получаю сообщение об ошибке «объект ‘str’ не имеет атрибута ‘copy’ »
Итак, как перевести этот «str» в pandas?

 def copydf():
    global dfNewName
    dfname = input(" Enter dataframe Name :")
    print (dfname)
    dfNewName = dfname.copy()
  

Спасибо, если вы можете помочь.

Комментарии:

1. зачем вам нужна «копия», почему бы просто не использовать строку, полученную из входных данных?

2. Чего именно вы пытаетесь достичь? Куда должен идти пользовательский ввод? Вы получаете сообщение об ошибке, потому что пытаетесь использовать метод copy для строки (пользовательский ввод всегда представляет собой строку типа «hello world»). Может быть, вы ожидаете, dfname что это будет фрейм данных pandas?

3. Да, идея состоит в том, чтобы создать копию «dfNewName» из фрейма данных «dtf»

4. @JacobIRR — В этом проблема, то, что возвращается из входных данных, это просто строка, не распознается pandas.

Ответ №1:

Вам нужно передать пользовательский ввод с помощью функции eval.

 import pandas as pd

dtf = pd.DataFrame({'col1' : ['Buenos Dias'],
     'col2' : ["Hello"],
     'col3' : ["Bonjour"]})

def copydf():
    dfname = input(" Enter dataframe Name :")
    try:
        newdf = eval(dfname).copy()
        return newdf
    except NameError:
        print("Dataframe not found")


new_df= copydf() #this is your copied dataframe
  

Комментарии:

1. Это выглядело хорошо, но я получаю другое сообщение об ошибке: ValueError: при использовании всех скалярных значений вы должны передать индекс

2. Это просто идеально. Ты великолепен. Спасибо

3. Пожалуйста, отметьте это как правильный ответ, я буду очень признателен, если вы это сделаете

4. Я должен настаивать, пожалуйста, отметьте ответ как решение, я буду очень признателен, если вы это сделаете