基于这个问题,我问如何将多个列合并到一个字典列中,我想知道如果条件允许的话吗?
考虑以下代码段:
import pandas as pd
import numpy as np
data = [
{"line": "a", "price": 123, "details_1": "d1", "details_2": "d2"},
{"line": "b", "price": 234, "details_1": np.nan, "details_2": "d2"},
{"line": "c", "price": 345, "details_1": "d1", "details_2": np.nan},
{"line": "d", "price": 456, "details_1": np.nan, "details_2": np.nan},
{"line": "e", "price": 567, "details_1": "d1", "details_2": "d2"},
]
df = pd.DataFrame(data)
来自E. Zeytinci的回答:
cols = ["details_1", "details_2"]
df["details"] = df[cols].to_dict(orient="records")
将“ details_1”和“ details_2”合并为一个单独的col,格式为dict,键为标签,这几乎是我所需要的。
如何添加条件,例如,我不想添加“ details_1”(如果其值为np.NaN,但我仍然需要添加“ details_2”)?
是否可以?如果可以,我该如何应用函数来格式化值,例如用“”替换所有“-”,“ _”,“”?
line price details_1 details_2 details
0 a 123 d1 d2 {'details_1': 'd1', 'details_2': 'd2'}
1 b 234 NaN d2 {'details_1': nan, 'details_2': 'd2'}
2 c 345 d1 NaN {'details_1': 'd1', 'details_2': nan}
3 d 456 NaN NaN {'details_1': nan, 'details_2': nan}
4 e 567 d1 d2 {'details_1': 'd1', 'details_2': 'd2'}
line price details_1 details_2 details
0 a 123 d1 d2 {'details_1': 'd1', 'details_2': 'd2'}
1 b 234 NaN d2 {'details_2': 'd2'}
2 c 345 d1 NaN {'details_1': 'd1'}
3 d 456 NaN NaN {}
4 e 567 d1 d2 {'details_1': 'd1', 'details_2': 'd2'}
谢谢 :)
使用嵌套字典推导来删除带有NaN
s的值:
cols = ["details_1", "details_2"]
df["details"] = [{k:v for k, v in x.items() if pd.notna(v)}
for x in df[cols].to_dict(orient="records")]
print (df)
line price details_1 details_2 details
0 a 123 d1 d2 {'details_1': 'd1', 'details_2': 'd2'}
1 b 234 NaN d2 {'details_2': 'd2'}
2 c 345 d1 NaN {'details_1': 'd1'}
3 d 456 NaN NaN {}
4 e 567 d1 d2 {'details_1': 'd1', 'details_2': 'd2'}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句