[英]Convert list of dict in dataframe to CSV
I have a dataframe that looks like this (df1):我有一个看起来像这样的数据框(df1):
id detail
78 [{}{}{}{}{}]
120 [{}{}{}{}{}]
110 [{}{}{}{}{}]
109 [{}{}{}{}{}]
109 [{}{}{}{}{}]
79 [{}{}{}{}{}]
The detail column contains a list of dictionaries and each dictionary looks like this:详细信息列包含一个字典列表,每个字典如下所示:
{'y1': 549, 'score': 1, 'x2': 630, 'frame': 1054, 'y2': 564, 'x1': 602, 'visibility': 0.0, 'class': 5}
I need to extract this information into a CSV with this format:我需要将此信息提取到具有以下格式的 CSV 中:
frame, id, x1, y1, x2, y2, score, class, visibility
In addition, the x2 and y2 in the extracted data should be like this:另外,提取数据中的x2和y2应该是这样的:
x2_new = x2 + x1 = 630 + 602 = 1232
y2_new = y2 + y1 = 564 + 549 = 1113
Expected output (Assuming the dict provided is in the first row of df1):预期输出(假设提供的 dict 位于 df1 的第一行):
1054, 78, 602, 549, 1232, 1113, 1, 5, 0.0
I have tried this code to create a new df based off the detail column but I got an error:我已尝试使用此代码根据详细信息列创建新的 df,但出现错误:
for i in finaldftoconvert['id']:
for k in finaldftoconvert[['detail'][['id']==i]]:
df = pd.DataFrame(k)
print df
Error:错误:
main.py:267: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison
for k in finaldftoconvert[['detail'][['id']==i]]:
Traceback (most recent call last):
File "main.py", line 268, in <module>
df = pd.DataFrame(k)
File "/usr/lib/python2.7/dist-packages/pandas/core/frame.py", line 305, in __init__
raise PandasError('DataFrame constructor not properly called!')
pandas.core.common.PandasError: DataFrame constructor not properly called!
a = pd.DataFrame(index=[78],columns=["detail"])
a.loc[78,"detail"] = [{'y1': 549, 'score': 1, 'x2': 630, 'frame': 1054, 'y2': 564, 'x1': 602, 'visibility': 0.0, 'class': 5}]
a.loc[188,"detail"] = [{'y1': 649, 'score': 1, 'x2': 630, 'frame': 1054, 'y2': 564, 'x1': 602, 'visibility': 0.0, 'class': 5}]
For each dict, you should use pd.DataFrame.from_dict
.对于每个字典,您应该使用
pd.DataFrame.from_dict
。 Actually, I don't exactly that you want to print it out?其实,我不完全是你想打印出来? or convert it into multiple dataframes.
或将其转换为多个数据帧。
Here is some simple solutions.这里有一些简单的解决方案。
# print it
a.applymap(lambda x:print(pd.DataFrame.from_dict({0:x[0]})))
# convert it
for i in a.index:
tmp = pd.DataFrame.from_dict({0:a.loc[i,"detail"][0]}).T
tmp.x2 = tmp.x2+tmp.x1
tmp.y2 = tmp.y2 + tmp.y1
# this function you could storge in any dict/list. Or you could storge into a list. And using pd.concat to concate them together.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.