[英]How to concatenate/replace specific words and a values in pandas dataframe column
I have a column of lists in pandas DataFrame like:我在 pandas DataFrame 中有一列列表,例如:
column_name_1
{"deltaImp":"10.3-13.1-14.1-15.1"}
{"deltaImp":"10.3-13.2-14.1-15.1"}
How can I transform the column values so the result should be:如何转换列值,结果应该是:
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}]}
I did try next steps:我确实尝试了接下来的步骤:
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('-')]
So I got:所以我得到了:
[[10, 3], [13, 2], [14, 1], [15, 1]]
and here I am stuck trying to add "name=" and "value="在这里我被困在尝试添加“name =”和“value =”
The result of df['column_name_1'].head().to_dict() the original contains more values in the same format 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"}'}
You can use:您可以使用:
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':...
Input data:输入数据:
>>> df
col1
0 [[10, 3], [13, 2], [14, 1], [15, 1]]
1 [[10, 3], [13, 3], [14, 1], [15, 2]]
Just do it while processing the data the first time:只需在第一次处理数据时执行此操作:
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}]}}"
Then:然后:
df["to_DB"] = df["column_name_1"].apply(transformer)
Output:输出:
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.