我正在尝试基于具有dict(作为字符串)的列创建新列。 例如,这些列包含{'human_number':100}和下一个{'robot_number':3221}
现在我要做的是遍历每一行并根据键创建一列,然后将该值填充到相应的列中。 例如: 如果某行在type_info列中包含{'human_number':100},则该行中应该有一个名为human_number的列,其中的数字为100,而robot_number中的内容为空。
def number_assign(row):
try:
temp = next(iter(ast.literal_eval(row["type_info"])))
row[temp] = next(iter(ast.literal_eval(row["type_info"]).values()))
except:
pass
然后我用df_test.apply(number_assign,axis = 1)呼叫
x = pd.DataFrame({'x': ["{'robot_number':1234}", "{'human_number':33}", '', "{'animal_number':223}"], 'y': [3, 4, 5,11]})
应该变成这样:
x = pd.DataFrame({'x': ["{'robot_number':1234}", "{'human_number':33}", '', "{'animal_number':223}"], 'y': [3, 4, 5,11], 'robot_number': [1234,'','',''], 'human_number' :['',33,'',''], 'animal_number':['','','',223] })
答案 0 :(得分:0)
pd.DataFrame
pd.DataFrame
构造函数是通用且高效的。您可以直接输入词典列表:
from ast import literal_eval
df = pd.DataFrame({'A': ["{'human_number':100}", "{'robot_number': 3221}"]})
df = pd.DataFrame(list(map(literal_eval, df['A'])))
print(df)
human_number robot_number
0 100.0 NaN
1 NaN 3221.0
该解决方案适用于每个字符串字典中的任意键/值。如果您有空字符串,则可以将列表理解与三元语句一起使用:
df = pd.DataFrame({'A': ["{'human_number':100}", "{'robot_number': 3221}", ""]})
df = pd.DataFrame([literal_eval(x) if x and (x == x) else {} for x in df['A']])
print(df)
human_number robot_number
0 100.0 NaN
1 NaN 3221.0
2 NaN NaN