将lambda应用于pandas中的列

2024-06-08 23:04:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有下面的数据框

ipdb> csv_data
  country_edited  sale_edited  date_edited  transformation_edited
0          India       403171     21091956                      1
1         Bhutan       394096     21091956                      2
2          Nepal       361372     21091956                      3
3         madhya       355883     21091956                      4
4          sudan       262949     21091956                      5

下面是我的代码

transfactor_count = 5.6
csv_data["transformation_edited"] = csv_data["transformation_edited"].apply(lambda x: x * transfactor_count)

但是上面的代码给了我一个错误

*** NameError: global name 'transfactor_count' is not defined

如何解决这个问题?

实际代码

for foreign_key in data_mapping_record.csvdatabasecolumnmapping_set.all():
    data_type = foreign_key.data_type
    trans_factor = foreign_key.tranformation_factor
    if data_type == "Decimal":
        import ipdb; ipdb.set_trace()
        csv_data[foreign_key.table_column_name] = csv_data[foreign_key.table_column_name].apply(lambda x: x * trans_factor )
    elif data_type in ["Date", "Datetime"]:
        csv_data[foreign_key.table_column_name] = csv_data[foreign_key.table_column_name].apply( lambda d: datetime.strptime(d, dates[date]) )

Tags: csvkey代码namedatatypecounttable
2条回答

您可以在dataframe上使用lambda,如下所示:

transfactor_count = 5.6;
csv_data['transformation_edited']=map(lambda x: x * transfactor_count, csv_data['transformation_edited'])

正如错误已经指出的,lambda函数找不到全局变量。 您可以尝试通过以下方式使其全球化:

global transfactor_count
transfactor_count = 5.6
csv_data["transformation_edited"] = csv_data["transformation_edited"].apply(lambda x: x * transfactor_count)

但正如耶斯雷尔所指出的:

csv_data["transformation_edited"] = csv_data["transformation_edited"] * transfactor_count 

更优雅。

您可能必须在以下时间之前将数据类型更改为float:

csv_data["transformation_edited"] = csv_data["transformation_edited"].astype(float) * transfactor_count

相关问题 更多 >