【问题标题】:Replace particular value in all of the Pandas dataframe替换所有 Pandas 数据框中的特定值
【发布时间】:2019-12-05 10:47:55
【问题描述】:

在使用 Pandas Dataframe(DF) 时让自己陷入了一个棘手的(我觉得如此)问题。

我有超过 10-15 个 DF 列,其中包含 dict 值列表的字符串。比如这样:

"[{u'firstLogin': u'2018-08-30 08:19:29 +0000', u'clientId': u'abcd12345wtregse', u'lastLogin': u'2018-08-30 08:19:29 +0000'}]"

我试图这样做:

df = df.replace({"'":'""', 'u"':'"'})

我对上述代码行的期望是,它将替换 DF 中存在的所有单引号,并且它将替换 u" 为 " 但是它似乎不适用于这条线。

预期输出:

"[{""firstLogin"": ""2018-08-30 08:19:29 +0000"", ""clientId"": ""abcd12345wtregse"", ""lastLogin"": ""2018-08-30 08:19:29 +0000""}]"

如何从整个 Pandas 数据框中的 dict 列表字符串中替换/更新所有单引号和字符串,如 u"?

示例输入:

column 1                                                                                                                        | column 2                                                                                                                           | column 3 
"[{u'firstLogin': u'2018-08-30 08:19:29 +0000', u'clientId': u'abcd12345wtregse', u'lastLogin': u'2018-08-30 08:19:29 +0000'}]" | "[{u'accepted': True, u'type': u'privacy_policy', u'id': 5872014}, {u'accepted': True, u'type': u'terms_of_use', u'id': 5872015}]" | "{u'type': u'password', u'value': u'2asdgdfjnasdgadfgd'}

我是 Pandas 的新手,有人可以帮我解决这个问题吗?

提前致谢!

【问题讨论】:

    标签: python string pandas dataframe replace


    【解决方案1】:

    这里是您的问题的解决方案。先看我定义的DF:

    df1=pandas.DataFrame([{"col":"[{u'firstLogin': u'2018-08-30 08:19:29 +0000', u'clientId': u'abcd12345wtregse', u'lastLogin': u'2018-08-30 08:19:29 +0000'}]", "col2":"[{u'firstLogin': u'2018-08-30 08:19:29 +0000', u'clientId': u'abcd12345wtregse', u'lastLogin': u'2018-08-30 08:19:29 +0000'}]"}])
    

    这是这个 DF 的解决方案:

    for col in  range(len(df1.columns)):
        col_name = df1.iloc[:,col].name
        temp=[]
        for rw in range(len(df1.index)):
            row_data = df1.iloc[rw,col].replace("'", '"')
            row_data = row_data.replace('u"', '"')        
            print(row_data)
            temp.append(row_data)
        df1[col_name]=temp
    

    我也尝试用无效的 DF.replace() 方法替换! 希望你得到你想要的?

    另一种更有效的替换所有列的方法如下:

    for col in  range(len(df1.columns)):
        col_name = df1.iloc[:,col].name
        df1[col_name] = df1[col_name].apply(lambda x: x.replace("'", '"').replace('u"', '"') if type(x) == str else x)
    

    这将彻底解决这个问题。

    【讨论】:

    • @Venkatesh_CTA 我已经为您的问题添加了新的解决方案,请查看
    猜你喜欢
    • 2022-01-24
    • 1970-01-01
    • 2019-02-25
    • 1970-01-01
    • 2021-09-17
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多