首页 > 解决方案 > 如何解决 FunctionError 和 MapError

问题描述

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>

我试图在 Stack Overflow 中找到答案很长一段时间,一些答案告诉我可以使用list(func1(column1)),但结果是[None, None]

标签: pythonprettytable

解决方案


基于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返回的内容感兴趣,我建议您阅读有关iterablesiterators的内容。map在调用函数的结果上返回一个迭代器,并且在您迭代它之前实际上不做任何工作。


推荐阅读