繁体   English   中英

如何连接/替换熊猫数据框列中的特定单词和值

[英]How to concatenate/replace specific words and a values in pandas dataframe column

我在 pandas DataFrame 中有一列列表,例如:

column_name_1
{"deltaImp":"10.3-13.1-14.1-15.1"}
{"deltaImp":"10.3-13.2-14.1-15.1"}

如何转换列值,结果应该是:

column_name_1
{deltaimp=[{name=10, value=2}, {name=13, value=1}, {name=14, value=1}, {name=15, value=1}]}
{deltaimp=[{name=10, value=2}, {name=13, value=2}, {name=14, value=1}, {name=15, value=1}]}

我确实尝试了接下来的步骤:

for key, value in pd.Series(df['cookies(babydriver)'].values).items():
    for key, value in dict.items():
        list = [[int(x) for x in ss.split('.')] for ss in value.split('-')]

所以我得到了:

[[10, 3], [13, 2], [14, 1], [15, 1]]

在这里我被困在尝试添加“name =”和“value =”

df['column_name_1'].head().to_dict() 原始结果包含更多相同格式的值

{0: '{"deltaImp":"10.3-13.1-14.1-15.1"}',
 1: '{"deltaImp":"10.3-13.2-14.1-15.1"}'}

您可以使用:

df['col2'] = df['col1'].apply(lambda x: [{'name': x[0], 'value': x[1]} for i in x])
print(df)

# Output
                                   col1                                               col2
0  [[10, 3], [13, 2], [14, 1], [15, 1]]  [{'name': [10, 3], 'value': [13, 2]}, {'name':...
1  [[10, 3], [13, 3], [14, 1], [15, 2]]  [{'name': [10, 3], 'value': [13, 3]}, {'name':...

输入数据:

>>> df
                                   col1
0  [[10, 3], [13, 2], [14, 1], [15, 1]]
1  [[10, 3], [13, 3], [14, 1], [15, 2]]

只需在第一次处理数据时执行此操作:

import ast  # built-in


def transformer(col):
    data = ast.literal_eval(col).get("deltaImp", "")
    result = ", ".join("{{name={}, value={}}}".format(*item.split(".")) for item in data.split("-"))
    return f"{{deltaImp=[{result}]}}"

然后:

df["to_DB"] = df["column_name_1"].apply(transformer)

输出:

In [4]: df["to_DB"] = df["column_name_1"].apply(transformer)

In [5]: df
Out[5]:
                        column_name_1                                              to_DB
0  {"deltaImp":"10.3-13.1-14.1-15.1"}  {deltaImp=[{name=10, value=3}, {name=13, value...
1  {"deltaImp":"10.3-13.2-14.1-15.1"}  {deltaImp=[{name=10, value=3}, {name=13, value...

你可以试试:

df.column_name_1.apply(lambda x: {key:[dict(zip(['name', 'value'], map(int, j.split('.')))) for j in val.split('-')] for key, val in eval(x).items()})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM