使用Python将列名替换为“\”

2024-05-13 20:09:23 发布

您现在位置:Python中文网/ 问答频道 /正文

下面的代码读取一个JSON文件并将其存储到DB表中。 但是使用"."生成的列名很少。 只有这些特定的列名必须替换为下划线"_"。在推送到表之前,如果在任何列名中遇到"."。在我的python代码中,不应该更改数据,而应该只更改带有".""_"的列名

下面是我尝试过的,但不确定如何替换列名,然后推送到DB:

import pandas as pd
import json
import sys
import psycopg2
 
data = sys.argv[1]
user= sys.argv[2]
password = sys.argv[3]
host = sys.argv[4]
port = sys.argv[5]
db = sys.argv[6]
documenttype = sys.argv[7]
schema_name =  sys.argv[8]

from sqlalchemy import create_engine

engine = create_engine('postgresql+psycopg2://'+user+':'+password+'@'+host+':'+port+'/'+db)
print("Database is connected")

df = pd.read_json(data)

df['RecordsNew'] = df['Records'].astype('|S80')

df_1 = pd.json_normalize(df['Records'])
df_1.columns = map(str.lower, df_1.columns)
table_name =documenttype.lower()

df_1.to_sql(table_name,schema=schema_name,con=engine, if_exists = 'append',index=False)

JSON代码示例:

{
  "Records": [
    {
      "CommodityId": "3470",
      "SourceSystem": "SSP-generic-CHILD4",
      "CommodityName": "ANCHOR BOLTS - BILL OF MATERIALS",
      "CommodityType": ""
    },
    {
      "CommodityId": "468657",
      "SourceSystem": "SSP-generic-CHILD4",
      "CommodityName": "COOLING INSERT",
      "CommodityType": ""
    },
    {
      "CommodityId": "836519",
      "SourceSystem": "SSP-generic-CHILD4",
      "CommodityName": "DIAPHRAGM 2ND STAGE PGT25",
      "CommodityType": ""
    },
    {
      "CommodityId": "807525",
      "SourceSystem": "SSP-generic-CHILD4",
      "CommodityName": "MOBILE NOZZLE MACHINING 2ST MS5002C(S2N)",
      "CommodityType": ""
      "ReconciledBy":{"SourceSystem":"SSP-sap-CHILD1","UserId":"","PasswordAdapter":""}
    },
    ...
  ],
  "PageToken": "TlhXQ0FVcTlzNE8rQQ"
}

使用“”生成的列名示例

"reconciledby.passwordadapter"
"procurementunit.sourcesystem"
"procurementunit.uniquename"
"sourcesystem.sourcesystemid"

Tags: 代码nameimportdfsysenginegenericpd