Python - 在什么情况下我可以看到这样的输出“<map object =”“at =”“0x0000025f7e342ba8 =”“>”

时间:2018-04-07 16:18:16

标签: python pandas

我是python编程的新手。我使用pandas libs读了一个csv。

我正在使用的代码是这样的:

csv_file = pd.read_csv("C:\\location-of-csv\\sample-csv.csv");
def update_measure(data):
    return data.split('_', 1)[1]

csv_file['UpdatedMeasurement'] = map(update_measure, csv_file['Measurement'])

当我打印输出时:

print(csv_file.head())

获得这样的价值

  Measurement                   UpdatedMeasurement
0 COL_TOOL_QUALITY             <map object at 0x0000025F7E342BA8>
1 COL_COMM_STATUS              <map object at 0x0000025F7E342BA8>
2 COL_SEN_FW_HRTBT_STATUS      <map object at 0x0000025F7E342BA8>
3 COL_WNL_FW_HRTBT_STATUS      <map object at 0x0000025F7E342BA8>
4 COL_COMM_STATUS2             <map object at 0x0000025F7E342BA8>   

请告诉我我的代码出了什么问题。 请参考我可以找到我的错误的文件,并希望彻底了解它,以便我知道我究竟做错了什么。

2 个答案:

答案 0 :(得分:0)

str[1]选择第二个列表需要str.split

csv_file['UpdatedMeasurement'] = csv_file['Measurement'].str.split('_', 1).str[1]
print (csv_file)
               Measurement   UpdatedMeasurement
0         COL_TOOL_QUALITY         TOOL_QUALITY
1          COL_COMM_STATUS          COMM_STATUS
2  COL_SEN_FW_HRTBT_STATUS  SEN_FW_HRTBT_STATUS
3  COL_WNL_FW_HRTBT_STATUS  WNL_FW_HRTBT_STATUS
4         COL_COMM_STATUS2         COMM_STATUS2

如果要使用自定义功能(NaN s时失败)请使用Series.applySeries.map

def update_measure(data):
    return data.split('_', 1)[1]

csv_file['UpdatedMeasurement'] = csv_file['Measurement'].apply(update_measure)
#alternative solution 
#csv_file['UpdatedMeasurement'] = csv_file['Measurement'].apply(update_measure)
#list comprehension solution
#csv_file['UpdatedMeasurement'] = [data.split('_', 1)[1] for data in csv_file['Measurement']]

答案 1 :(得分:0)

内置函数map会在iterator中返回Python 3,这是您在此处观察到的对象。这在处理大量数据时具有一些优势,因为它将按需处理每个项目,而不会在只有少数数据感兴趣的情况下构建所有结果的列表。相关的影响是,如果您有更多的处理层,它将更好地使用缓存。在Python 2中,map返回了list,迭代器版本被称为itertools.imap。由于此更改,以前显示结果的某些代码可能只显示迭代器对象;重现完整结果的简单方法是应用list()。