Python 将数组记录到json.dumps
我需要从Pandas数据帧生成json,但是使用df.to_json会显示分段错误,所以我想找到另一种方法来创建json,我得到的唯一一件事就是从数据帧创建一个记录数组 现在我需要用文件名创建json.dump。像这样的Python 将数组记录到json.dumps,python,json,numpy,pandas,dump,Python,Json,Numpy,Pandas,Dump,我需要从Pandas数据帧生成json,但是使用df.to_json会显示分段错误,所以我想找到另一种方法来创建json,我得到的唯一一件事就是从数据帧创建一个记录数组 现在我需要用文件名创建json.dump。像这样的 { "id":123, "name":"myname"} 这是我设法创建的代码,这是我的文件(): 我需要这样一个JSON: [ { 'City':'Sooke', 'FirstName':'Devin', 'Title':nan, 'Last
{ "id":123, "name":"myname"}
这是我设法创建的代码,这是我的文件():
我需要这样一个JSON:
[
{
'City':'Sooke',
'FirstName':'Devin',
'Title':nan,
'LastName':'Phillips',
'SubTotal':'189,97',
'OrderDate':'2014-06-30 00:00:00.000',
'AddressType':'Home',
'PhoneNumberType':'Home',
'TaxAmt':'15,1976',
'AddressLine2':nan,
'AddressLine1':'2742 Cincerto Circle',
'DueDate':'2014-07-12 00:00:00.000',
'TotalDue':'209,9169',
'ShipDate':'2014-07-07 00:00:00.000',
'StateProvinceName':'British Columbia',
'MiddleName':nan,
'ProductCategory':'Accessories',
'PhoneNumber':'425-555-0163',
'CountryRegionName':'Canada',
'PostalCode':'V0',
'SalesOrderNumber':'SO75123',
'Suffix':nan,
'ProductName':'All-Purpose Bike Stand',
'SalesOrderID':75123,
'EmailAddress':'devin38@adventure-works.com',
'EmailPromotion':0,
'Freight':'4,7493',
'UnitPrice':'159',
'ProductSubcategory':'Bike Stands'
},
{
'City':'Sooke',
'FirstName':'Devin',
'Title':nan,
'LastName':'Phillips',
'SubTotal':'189,97',
'OrderDate':'2014-06-30 00:00:00.000',
'AddressType':'Home',
'PhoneNumberType':'Home',
'TaxAmt':'15,1976',
'AddressLine2':nan,
'AddressLine1':'2742 Cincerto Circle',
'DueDate':'2014-07-12 00:00:00.000',
'TotalDue':'209,9169',
'ShipDate':'2014-07-07 00:00:00.000',
'StateProvinceName':'British Columbia',
'MiddleName':nan,
'ProductCategory':'Clothing',
'PhoneNumber':'425-555-0163',
'CountryRegionName':'Canada',
'PostalCode':'V0',
'SalesOrderNumber':'SO75123',
'Suffix':nan,
'ProductName':'AWC Logo Cap',
'SalesOrderID':75123,
'EmailAddress':'devin38@adventure-works.com',
'EmailPromotion':0,
'Freight':'4,7493',
'UnitPrice':'8,99',
'ProductSubcategory':'Caps'
}
]
我得到的错误是:
Traceback (most recent call last):
File "/home/ubuntu/workspace/python/tests2.py", line 11, in <module>
d[c] = r.__getattribute__(c)
TypeError: list indices must be integers, not unicode
回溯(最近一次呼叫最后一次):
文件“/home/ubuntu/workspace/python/tests2.py”,第11行,在
d[c]=r.\uuu getattribute\uuuu(c)
TypeError:列表索引必须是整数,而不是unicode
但我真的很感谢最终结果的帮助,我一直在一个错误一个错误地改变,但无法达到我想要的。我需要JSON将其插入MongoDB。就像错误所说的,
d
是一个列表,您正试图使用unicode字符串对其进行索引。您必须将其更改为字典(d={}
)
然而,输出仍然不是您所期望的。相反,您可以这样做:
for r in data2:
arrayJSON.append(dict(zip(columns, r.tolist())))
甚至这个:
arrayJSON = [dict(zip(columns, r.tolist())) for r in data2]
tolist()
将记录r
转换为包含本机python值的正常列表。这样就可以通过json.dumps
对其进行序列化json.dumps
可能仍然包含诸如NaN
之类的值,这实际上不是有效的json。您可以使用以下方法替换数据帧中的这些值:
data.fillna(value=”“,inplace=True)
这就是一切的样子:
import pandas as pd
import json
columns = [...]
data = pd.read_csv('../Uploads/TxtDataSimplified.txt', header=0, names=columns, sep='\t')
data.fillna(value="", inplace=True)
data2 = data.to_records(index=0)
arrayJSON = [dict(zip(columns, r.tolist())) for r in data2]
print(json.dumps(arrayJSON))
您能提供DataFrame和所需JSON文件的示例片段吗?请将它们作为编辑添加到您的问题中。您从何处获取源数据?您还需要包括您获得的实际错误消息。
import pandas as pd
import json
columns = [...]
data = pd.read_csv('../Uploads/TxtDataSimplified.txt', header=0, names=columns, sep='\t')
data.fillna(value="", inplace=True)
data2 = data.to_records(index=0)
arrayJSON = [dict(zip(columns, r.tolist())) for r in data2]
print(json.dumps(arrayJSON))