【问题标题】:Multiple nested if conditions inside lambdalambda中的多个嵌套if条件
【发布时间】:2021-02-21 09:07:06
【问题描述】:

我在 pandas 数据框中有一列名为 zipcode。一些行包含 NaN 值,一些包含正确的字符串格式,如“160 00”,其余包含错误的格式,如“18000”。我想要的是跳过 NaN 值(而不是丢弃它们)并将错误的邮政编码转换为正确的邮政编码;例如:“18000”->“180 00”。 是否可以通过应用 lambda 来做到这一点?到目前为止,我得到的只是这个:

df['zipcode']apply(lambda row: print(row[:3] + ' ' + row[3:]) if type(row) == str else row)

数据框示例:

df = pd.DataFrame(np.array(['11100', '246 00', '356 50',
                            np.nan, '18000', '156 00', '163 00']), columns=['zipcode'])

  zipcode
0   11100
1  246 00
2  356 50
3     nan
4   18000
5  156 00
6  163 00

谢谢。

【问题讨论】:

  • ddddd 格式中是否存在所有格式不正确的值,如果我理解正确,您想将这些值更改为ddd dd?另外,如果可能的话,您能否在zipcode 列中包含一个小样本?
  • 没有灵丹妙药。你最好在这里定义一个函数来处理你的所有错误并返回正确的格式;您仍然可以将其与 apply 一起使用
  • @ShubhamSharma 是的,我想更改值以形成 ddd dd。 pd.DataFrame(np.array(['11100', '246 00', '356 50',np.nan,'18000', '156 00', '163 00']), columns=['zipcode'])

标签: python-3.x pandas dataframe lambda


【解决方案1】:

让我们试试.str.replace:

df['zipcode'] = df['zipcode'].str.replace(r'(\d{3})\s*(\d+)', r'\g<1> \g<2>')

  zipcode
0  111 00
1  246 00
2  356 50
3     nan
4  180 00
5  156 00
6  163 00

【讨论】:

    猜你喜欢
    • 2020-02-25
    • 2021-07-15
    • 1970-01-01
    • 2016-12-16
    • 1970-01-01
    • 1970-01-01
    • 2019-10-14
    • 2019-01-20
    • 2013-03-29
    相关资源
    最近更新 更多