【发布时间】:2018-07-31 15:50:30
【问题描述】:
我正在尝试从下面提到的字典中创建以下数据框。有没有有效的解决方案?
data_dict = {
'Total_Amount' : '150.00',
'LinkAPI' : [{"ConfidenceScore":4},{"ConfidenceScore":9}],
'RecordID' : 5687,
'ClientId' : 45,
'Customer_Number' : ["HDMO70232"],
'RowNumber' : 0,
'Invoice_Number' : '',
'Customer_Name' : 'HD MOTORCYCLES SIS/SVC'
}
数据框中的行数,应等于“LinkAPI”列表中的项目数。上述数据的数据框应如下图所示。
ClientId Customer_Name Customer_Number Invoice_Number LinkAPI RecordID RowNumber Total_Amount
0 45 HD MOTORCYCLES SIS/SVC [HDMO70232] {'ConfidenceScore': 4} 5687 0 150.00
1 45 HD MOTORCYCLES SIS/SVC [HDMO70232] {'ConfidenceScore': 9} 5687 0 150.00
我尝试了两种解决方案来实现这一点。我希望有更好的方法来创建数据框。 解决方案1:
items_number = len(data_dict['LinkAPI'])
df_dict = {k : [data_dict[k] for _ in range(items_number)] if k != 'LinkAPI' else data_dict[k]
for k in data_dict.keys()}
df = pd.DataFrame(df_dict)
解决方案 2:
LinkAPI = data_dict["LinkAPI"]
df_new = pd.DataFrame(columns=list(df)) # list(df) is ['ClientId','Customer_Name', 'Customer_Number',
# 'Invoice_Number', 'LinkAPI','RecordID', 'RowNumber', 'Total_Amount']
i=0
for conf in LinkAPI:
df_new.loc[i] = [data_dict["Total_Amount"], conf, data_dict["RecordID"], data_dict["ClientId"], data_dict["Customer_Number"],
data_dict["RowNumber"], data_dict["Invoice_Number"], data_dict["Customer_Name"]]
i+=1
【问题讨论】:
标签: python pandas list-comprehension dictionary-comprehension