Python 将数组记录到json.dumps

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

我需要从Pandas数据帧生成json,但是使用df.to_json会显示分段错误,所以我想找到另一种方法来创建json,我得到的唯一一件事就是从数据帧创建一个记录数组

现在我需要用文件名创建json.dump。像这样的

{ "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))