首页 > 解决方案 > 替换所有 Pandas 数据框中的特定值

问题描述

在使用 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'}

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

提前致谢!

标签: pythonstringpandasdataframereplace

解决方案


这是您的问题的解决方案。首先看我定义如下的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)

这将完全解决这个问题。


推荐阅读