1

我有一个非常大的数据集。我想通过humanize.intword在除日期之外的所有列中使用该函数来方便阅读。

在此处输入图像描述

当我只选择一列时,它可以工作:

pred_df["Predictions"].apply(lambda x: humanize.intword(x))

当我尝试选择其他数字列时,出现错误:

pred_df.apply(lambda row : humanize.intword(row['Predictions'],row['Lower'], row['Upper']), axis = 1)

类型错误:序列项 0:预期的 str 实例,找到浮点数

我还尝试了这篇文章中建议的列表推导,https://stackoverflow.com/questions/16476924/how-to-iterate-over-rows-in-a-dataframe-in-pandas但我可能做错了什么。它适用于一列:

[humanize.intword(x) for x in pred_df["Predictions"]]

当我尝试不同的列时,出现错误:

[humanize.intword(row 1 , row[11]) for row in zip(pred_df["Predictions"],pred_df["Lower"])]

IndexError:元组索引超出范围

我的数据框包含 12 行和 4 列。你能帮我理解是什么问题吗?

4

1 回答 1

1

问题是humanize.intword使用单个值并将其转换。但这里的目标是转换许多数字。一种方法是applymap

df.set_index("fiscal_date").applymap(humanize.intword)

我们首先将日期设置为索引,以便在计算中不使用它。reset_index()如果你愿意,你可以把它放回一列。


至于为什么会出错:

当我只选择一列时,它可以工作:

因为您选择了一个系列,而传递给apply的是该列的单个条目;它有效。

当我尝试选择其他数字列时,出现错误:

因为您将提供 3 个值,intword但它只能与 1 + 1 一起使用,其中 first 是要转换的值,而 other 是可选格式。(错误消息应该是“这个函数需要 1 到 2 个参数,但你给了 3 个”,我相信。)

它适用于一列:

同样,这类似于第一apply列。

当我尝试不同的列时,出现错误:

同样,一次intword可以使用一个值。(但错误是因为您11作为索引提供了row仅来自这 2 列条目的 2 个元素。)

于 2021-05-31T06:08:21.160 回答