【问题标题】:How to print rows in a json that have a duplicated column value?如何在 json 中打印具有重复列值的行?
【发布时间】:2021-05-07 20:12:36
【问题描述】:

我有一个这样的 json 文件

{"places": [{"place_name":"123 YOU N ME PRESCHOOL","address":"809 W DETWEILLER DR STE A","city": "PEORIA","state":"IL","zip":"61615","geo_location":"40.78878653,-89.605669034","data": {}},{"place_name":"123 YOU N ME PRESCHOOL","address":"6501 SOUTH 12TH ST","city":"PORTAGE","state":"MI","zip":"49024","geo_location":"42.220381633,-85.646607261","data": {}}, {"place_name": "18144 GLEN TERRACE ST.", "address": "18144 GLEN TERRACE ST.", "city": "LANSING", "state": "IL", "zip": "60438", "geo_location": "41.565952019,-87.556316006", "data": {}}]}

如您所见,前两个“place_name”值相同,我希望将它们打印出来。这是我到目前为止的代码,但我得到的只是一个 Nan。有人可以帮忙吗?

import pandas as pd

places = pd.read_json("test.json")
dfObj = pd.DataFrame(places, columns = ['name', 'address', 'city', 'state', 'zip', 'geo', 'data'])
duplicatedRowsDF = dfObj[dfObj.duplicated(["name"])]
print(duplicatedRowsDF)

这是输出

   name  address  city  state  zip  geo  data
1   NaN      NaN   NaN    NaN  NaN  NaN   NaN
2   NaN      NaN   NaN    NaN  NaN  NaN   NaN

我想要的输出只是重复的列的名称

【问题讨论】:

    标签: python json pandas dataframe


    【解决方案1】:
    >>> from pandas import json_normalize
    >>>
    >>> json_data = {"places": [{"place_name":"123 YOU N ME PRESCHOOL","address":"809 W DETWEILLER DR STE A","city": "PEORIA","state":"IL","zip":"61615","geo_location":"40.78878653,-89.605669034","data": {}},{"place_name":"123 YOU N ME PRESCHOOL","address":"6501 SOUTH 12TH ST","city":"PORTAGE","state":"MI","zip":"49024","geo_location":"42.220381633,-85.646607261","data": {}}, {"place_name": "18144 GLEN TERRACE ST.", "address": "18144 GLEN TERRACE ST.", "city": "LANSING", "state": "IL", "zip": "60438", "geo_location": "41.565952019,-87.556316006", "data": {}}]}
    >>>
    >>> df = json_normalize(json_data, record_path='places')
    >>> df
                   place_name                    address     city state    zip                geo_location
    0  123 YOU N ME PRESCHOOL  809 W DETWEILLER DR STE A   PEORIA    IL  61615   40.78878653,-89.605669034
    1  123 YOU N ME PRESCHOOL         6501 SOUTH 12TH ST  PORTAGE    MI  49024  42.220381633,-85.646607261
    2  18144 GLEN TERRACE ST.     18144 GLEN TERRACE ST.  LANSING    IL  60438  41.565952019,-87.556316006
    

    place_namestate 列有重复项。以下是将这些列名作为list 获取的两种方法(具有列名,您可以使用df[df[<column name(s)>].duplicated(keep=False)] 获取具有重复项的df 的行):

    >>> df.columns[df.apply(pd.Series.duplicated).any()].to_list() # close to what you have, i.e., apply `duplicated` to each column
    ['place_name', 'state']
    >>> 
    >>> [c for c in df.columns if not df[c].is_unique] # another way
    ['place_name', 'state']
    

    【讨论】:

      【解决方案2】:

      你可以像这样找到重复的地名:

      import collections
      place_names = [item['place_name'] for item in places['places']]
      print([item for item, count in collections.Counter(place_names).items() if count > 1])
      

      这将打印['123 YOU N ME PRESCHOOL']

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-05
        • 1970-01-01
        • 1970-01-01
        • 2015-07-06
        • 2019-09-26
        • 2013-11-06
        相关资源
        最近更新 更多