Как решить FunctionError и MapError - PullRequest
1 голос
/ 15 июня 2019

Python 3.6 Pycharm

import prettytable as pt
import numpy as np
import pandas as pd

a=np.random.randn(30,2)
b=a.round(2)
df=pd.DataFrame(b)
df.columns=['data1','data2']
tb = pt.PrettyTable()

def func1(columns):
    def func2(column):
        return tb.add_column(column,df[column])
    return map(func2,columns)

column1=['data1','data2']
print(column1)
print(func1(column1))

Я хочу получить результаты:

tb.add_column('data1',df['data1'])
tb.add_column('data2',df['data2'])

На самом деле , результаты:

<map object at 0x000001E527357828>

Я пытаюсь найти ответ в Переполнении стека в течение долгого времени, какой-то ответ говорит мне, что можно использовать list(func1(column1)), но в результате получается [None, None].

1 Ответ

0 голосов
/ 16 июня 2019

На основе учебника по https://ptable.readthedocs.io/en/latest/tutorial.html, PrettyTable.add_column изменяется PrettyTable на месте.Такие функции обычно возвращают None, а не измененный объект.

Вы также усложняете проблему, пытаясь использовать map и необычную функцию-обертку.Приведенный ниже код намного проще, но дает желаемый результат.

import prettytable as pt
import numpy as np
import pandas as pd

column_names = ['data1', 'data2']

a = np.random.randn(30, 2)
b = a.round(2)
df = pd.DataFrame(b)
df.columns = column_names
tb = pt.PrettyTable()

for col in column_names:
    tb.add_column(col, df[col])

print(tb)

Если вам все еще интересно узнать о том, что возвращает map, я предлагаю прочитать о итерациях и итераторы .map возвращает итератор по результатам вызова функции и фактически не выполняет никакой работы, пока вы не выполните итерацию по ней.

...