【问题标题】:How to deal with unicode values dict in a column如何处理列中的unicode值dict
【发布时间】:2019-04-04 10:04:37
【问题描述】:

我在 df 中有一个列(“折扣”),其中每个值都采用其格式:

{u'customer': u'xdawd', u'end': None, u'coupon': {u'object': u'coupon', u'name': u'Black Friday', u'percent_off': None, u'created': 213213, u'times_redeemed': 10, u'amount_off': 2500, u'currency': u'gbp', u'object': u'discount', u'start': 1543327380, u'subscription': u'uiodsjciosdj'}

我想在一个新列中返回 percent_off 值或 amount_off 值(两者中只出现一个),所以我必须获取其值不是 None 的那个。

只是一个在 excel 中的示例: https://i.imgur.com/Dt2fj8i.png

【问题讨论】:

  • 你试过把它解析成字符串吗? python str(value)
  • 考虑切换到 Python3:它有原生的 Unicode 处理,所以它使很多事情变得简单(而不是破解本地编码)。 [顺便说一句,Python2 很快将不再受支持,并且许多软件包不再支持它]:个人意见:传递给 Python3 所需的时间更少,然后在 Python2 上学习正确(“hacking”)Unicode。

标签: python pandas unicode apply


【解决方案1】:

使用lambda functionSeries.apply

df['discount'].apply(lambda x: x['coupon'].get('percent_off') or x['coupon'].get('amount_off'))

[出]

0    2500
Name: discount, dtype: int64

或者,如果您希望按照@lenz 的建议更明确:

def extract_discount(x):
    return x['coupon'].get('percent_off') or x['coupon'].get('amount_off') 

df['discount'].apply(extract_discount)

【讨论】:

  • f = lambda x: ...而不是def f(x): ...有什么好处?
  • 真的没什么好处,lambda 只是更简洁一点。 def 仅在要重用函数时才需要
  • 嗯,它正在被重用,这就是为什么需要将它分配给一个变量f,以便您以后可以引用它。通常,linter 会标记这种用法,因为您正在为用于未命名函数的构造分配名称。就个人而言,我发现 lambdas 比常规定义的函数更难阅读。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-20
  • 1970-01-01
  • 2021-02-28
  • 1970-01-01
  • 2015-10-18
  • 2023-01-10
  • 2011-04-07
相关资源
最近更新 更多