pandas 删除方括号

djmepvbi  于 2023-05-15  发布在  其他
关注(0)|答案(1)|浏览(165)

我正在尝试将一些数据从CSV转换为JSON,准备作为文档加载到MongoDB中。我已经浏览了数百个Q& A,并提出了下面的代码,但有一个问题与方括号被添加。
我需要的结构如下,适用于所有英国邮政编码:

[
   {
      "Postcode":"BS273EE",
      "Location":
         {
            "coordinates":[
               "-2.783927",
               "51.275287"]
            ,
            "type":"Point"
         }
      ]
   }]

不过,我得到了以下内容-只是location元素中的方括号,用于一个dict的列表:

[
   {
      "Postcode":"BS273EE",
      "Location":[
         {
            "coordinates":[
               "-2.783927",
               "51.275287"]
            ,
            "type":"Point"
         }
      ]
   }]

我使用的代码是:

url = 'National_Statistics_Postcode_Lookup_UK_Coordinates.csv'
fields= ['Postcode 1', 'Longitude','Latitude']
df = pd.read_csv(url, skipinitialspace=True,usecols=fields,dtype=str)
df['type'] = 'Point'
df['coordinates'] = df[["Longitude","Latitude"]].values.tolist()
df1 = df[['Postcode','type','coordinates']]
df2 = (df1.head(5).groupby(['Postcode']).apply(lambda x: x[{'type','coordinates'}].to_dict('records')).reset_index().rename(columns={0:'Location'}).to_json(orient='records'))
print(df2)#testing output

原始的CSV数据结构只是:

Postcode, Longitude, Latitude

XX56XX     -95.4343   55.5335

我发现将to_dict更改为'index'确实满足了我的需要,但随后单词'Location'被替换为100,000个左右邮政编码中每个邮政编码的迭代数字。我需要的是“位置”这个词,而不是数字“0”,“1”等。因此,将to_dict('records')更改为to_dict('index')并不是正确的答案。

628mspwn

628mspwn1#

转换为记录后,添加[0]以获得第一个元素:

result = (
    df1.head(5)
    .groupby(["Postcode"])
    # Following line is changed
    .apply(lambda x: x[["type", "coordinates"]].to_dict("records")[0]) 
    .reset_index()
    .rename(columns={0: "Location"})
).to_json(orient="records")

输出:

[
    {
        "Postcode":"BS273EE",
        "Location":{
            "type":"Point",
            "coordinates":[
                "-2.783927",
                "51.275287"
            ]
        }
    }
]

相关问题