Python 如何在熊猫中添加列表?

Python 如何在熊猫中添加列表?,python,json,pandas,dataframe,apply,Python,Json,Pandas,Dataframe,Apply,我正在读取一个数据帧,并尝试在另一个列表中插入一个列表,然后将其转换为json文件。我正在使用Python3和pandas的0.25.3版本 ============================ 我正在阅读的数据: ============================ 这是我的密码: ============================= 预期: ============================ 我得到的是: ====================== 我尝试使用iterr

我正在读取一个数据帧,并尝试在另一个列表中插入一个列表,然后将其转换为json文件。我正在使用Python3和pandas的0.25.3版本

============================

我正在阅读的数据:

============================

这是我的密码:

=============================

预期:

============================

我得到的是:

======================

我尝试使用iterrows函数做同样的事情,并在这里发布了一个问题“Dataframe和使用Pandas转换为JSON”,但有些人建议我尝试使用另一个函数的另一种方法。我知道在我的数据中添加数字对象是一件愚蠢的事情,但我已经尝试了其他方法


您能帮助我吗?

定义以下重新格式化功能:

def reformat(row):
    d1 = { 'part': str(row.part_number), 'client': str(row.number_client)}
    d2 = { 'id': row.id_customer, 'label': row.label_customer, 'number': [d1] }
    return { 'id': row.id, 'label': row.label, 'Customer': [d2] }
然后按以下方式应用它:

df.apply(reformat, axis=1).to_json('result.json', orient='records')
为可读性而重新格式化的结果是:

[ { "id":6,
    "label":"Sao Paulo",
    "Customer":[
      { "id":"CUST-99992",
        "label":"Brazil",
        "number":[{"part":"7897","client":"982"}]
      }
    ]
  },
  { "id":92,
    "label":"Hong Kong",
    "Customer":[
      { "id":"CUST-88888",
        "label":"China",
        "number":[{"part":"147","client":"288"}]
      }
    ]
  }
]
编辑下面的评论 处理单个标签的多行变体的步骤/ 为客户贴上标签,采取另一种方法:

从定义以下函数开始:

获取数字属性的内容:

def getNum(grp):
    return eval(grp[['part', 'client']].to_json(orient='records'))
def getCust(grp):
    r0 = grp.iloc[0]
    return { 'id': r0.id_customer, 'label': r0.label_customer, 'number': getNum(grp) }
注意此函数中的eval。否则,结果将是一个字符串 而不是字典列表

获取客户属性的内容:

def getNum(grp):
    return eval(grp[['part', 'client']].to_json(orient='records'))
def getCust(grp):
    r0 = grp.iloc[0]
    return { 'id': r0.id_customer, 'label': r0.label_customer, 'number': getNum(grp) }
获取当前组的整个JSON元素的内容:

def getGrp(grp):
    r0 = grp.iloc[0]
    return { 'id': r0.id, 'label': r0.label, 'Customer': getCust(grp) }
然后将列类型转换为字符串:

要获得最终结果,请运行:

df.rename(columns={'part_number': 'part', 'number_client': 'client'})\
    .groupby(['id', 'label', 'id_customer', 'label_customer'])\
    .apply(getGrp).to_json(orient='values')
上述代码:

将零件号和零件号客户机重命名为零件和客户机, 分别地需要进行此更改以生成适当的元素 按getNum命名。 将数据帧分组为代码中的数据帧。 将getGrp函数应用于每个组。结果是一系列的 JSON元素。 最后,to_json将此系列转换为json元素列表。
定义以下重新格式化函数:

def reformat(row):
    d1 = { 'part': str(row.part_number), 'client': str(row.number_client)}
    d2 = { 'id': row.id_customer, 'label': row.label_customer, 'number': [d1] }
    return { 'id': row.id, 'label': row.label, 'Customer': [d2] }
然后按以下方式应用它:

df.apply(reformat, axis=1).to_json('result.json', orient='records')
为可读性而重新格式化的结果是:

[ { "id":6,
    "label":"Sao Paulo",
    "Customer":[
      { "id":"CUST-99992",
        "label":"Brazil",
        "number":[{"part":"7897","client":"982"}]
      }
    ]
  },
  { "id":92,
    "label":"Hong Kong",
    "Customer":[
      { "id":"CUST-88888",
        "label":"China",
        "number":[{"part":"147","client":"288"}]
      }
    ]
  }
]
编辑下面的评论 处理单个标签的多行变体的步骤/ 为客户贴上标签,采取另一种方法:

从定义以下函数开始:

获取数字属性的内容:

def getNum(grp):
    return eval(grp[['part', 'client']].to_json(orient='records'))
def getCust(grp):
    r0 = grp.iloc[0]
    return { 'id': r0.id_customer, 'label': r0.label_customer, 'number': getNum(grp) }
注意此函数中的eval。否则,结果将是一个字符串 而不是字典列表

获取客户属性的内容:

def getNum(grp):
    return eval(grp[['part', 'client']].to_json(orient='records'))
def getCust(grp):
    r0 = grp.iloc[0]
    return { 'id': r0.id_customer, 'label': r0.label_customer, 'number': getNum(grp) }
获取当前组的整个JSON元素的内容:

def getGrp(grp):
    r0 = grp.iloc[0]
    return { 'id': r0.id, 'label': r0.label, 'Customer': getCust(grp) }
然后将列类型转换为字符串:

要获得最终结果,请运行:

df.rename(columns={'part_number': 'part', 'number_client': 'client'})\
    .groupby(['id', 'label', 'id_customer', 'label_customer'])\
    .apply(getGrp).to_json(orient='values')
上述代码:

将零件号和零件号客户机重命名为零件和客户机, 分别地需要进行此更改以生成适当的元素 按getNum命名。 将数据帧分组为代码中的数据帧。 将getGrp函数应用于每个组。结果是一系列的 JSON元素。 最后,to_json将此系列转换为json元素列表。
你能给出一个输入数据框的示例吗?嗨,你能展示一下数据框数据在处理结束时的样子吗?我编辑了我的问题@ScottBoston!!TK你能给出一个输入数据框的示例吗?嗨,你能展示一下数据框数据在处理结束时的样子吗?我编辑了我的问题@ScottBoston!!谢谢你的评论@Valdi_Bo,但没有解决我的问题。我现在编辑了我的问题。。希望这有帮助。。例如:如果第0行中我的单元格中的所有内容在第2行中都相同,但在part_number和number_client中除外,则不会创建id、label、id_customer和label_customer的新对象。。只会添加一个新的号码列表,如我的问题描述中所示。我更改了解决方案,以应对单个标签/标签客户多行的情况。感谢您的评论@Valdi_-Bo,但没有解决我的问题。我现在编辑了我的问题。。希望这有帮助。。例如:如果第0行中我的单元格中的所有内容在第2行中都相同,但在part_number和number_client中除外,则不会创建id、label、id_customer和label_customer的新对象。。只会添加一个新的号码列表,如我的问题描述中所示。我更改了解决方案,以应对单个标签/标签客户多行的情况。