首页 > 编程问答 >JSON 响应中的字符串值变成 Python pandas datafram 中的数值

JSON 响应中的字符串值变成 Python pandas datafram 中的数值

时间:2024-07-25 12:55:48浏览次数:13  
标签:python pandas

我正在使用 Python 从 REST API 中提取数据并将其存储在 SQL 数据库中。除了响应中的一个 JSON 值之外,一切工作正常。

JSON 响应

[ { "pbxId": "XXXcxx", "site": "XXX Group - Sydney Office", "name": "XXXX Service", "extension": "622", "totalMembers": 3, "totalInbound": 1, "totalAbandoned": 0, "totalAnswered": 1, "totalMissed": 0, "totalCallsToVM": 0, "totalAdvanced": 0, "totalRgTime": 36339, "totalTalkTime": 25613, "totalCalls": 1, "avgAbandonedTime": 0, "avgRgTime": 36339, "avgRingTime": 10726, "avgTalkTime": 25613, "totalAbandonedTime": 0, "totalRingTime": 10726 } ]

response2 = requests.get(url, headers=headers) d =json.loads(response2.text) cdr =json_normalize(d) print(cdr)

当我打印响应时,“名称”值显示正确。

然后我将其插入 SQL DB

conn = pyodbc.connect(connectionString) df = pd.DataFrame(cdr, columns = ['pbxId','site','name','extension',....'totalRingTime']) df.columns = ['pbxId','site','name','extension',.....'totalRingTime'] #print(df) cursor = conn.cursor() df = df.astype(object).where(pd.notnull(df),None) for index, row in df.iterrows(): cursor.execute("INSERT INTO eightwave_RingGroupSummary values(?,?,?,?,...,?,?,?,?,?)",row.pbxId,row.site,str(row.name),row.extension,int(row.totalMembers),int(row.totalInbound),....int(row.totalRingTime)) cursor.commit() cursor.close() conn.close()

此处的值“名称”变成数字。并且它不断增加。例如,当 df 中有两行时,名称值变为 0 和 1 等。

任何帮助表示赞赏。

TIA

我希望该值与从 API 返回的值相同。我尝试删除 str() 类型转换


问题出在这一行代码,你使用 df.astype(object).where(pd.notnull(df), None) 将 DataFrame 中的所有列都转换为 object 类型,然后再将其插入数据库:

df = df.astype(object).where(pd.notnull(df), None) 

由于 object 类型可以存储任何 Python 对象,包括数字和字符串,因此当你在数据库中插入 object 类型的数据时,数据库驱动程序会尝试根据数据本身的类型来自动推断其数据类型。

对于你的 "name" 列来说,虽然它最初存储的是字符串值,但在转换为 object 类型之后,它变成了可以存储任何 Python 对象的容器。当数据库驱动程序尝试推断其数据类型时,它可能会将字符串解释为数字,因为字符串中可能只包含数字字符。

解决方案:

你不需要将整个 DataFrame 转换为 object 类型。你可以直接将 DataFrame 插入数据库,数据库驱动程序会根据每列的数据类型自动进行转换。

修改你的代码,移除 df = df.astype(object).where(pd.notnull(df), None) 这一行,然后直接使用 df 插入数据库:

conn = pyodbc.connect(connectionString)
df = pd.DataFrame(cdr, columns=['pbxId', 'site', 'name', 'extension', ..., 'totalRingTime'])
df.columns = ['pbxId', 'site', 'name', 'extension', ..., 'totalRingTime']

cursor = conn.cursor()
for index, row in df.iterrows():
    cursor.execute(
        "INSERT INTO eightwave_RingGroupSummary values(?,?,?,?,...,?,?,?,?,?)",
        row.pbxId, row.site, row.name, row.extension, row.totalMembers, row.totalInbound, ...,
        row.totalRingTime
    )
cursor.commit()
cursor.close()
conn.close()

这样,数据库驱动程序会将 "name" 列正确识别为字符串类型,并在数据库中存储为字符串。

标签:python,pandas
From: 78791474

相关文章

  • 适用于 Python 的 Firebase-admin sdk 引发错误“StreamGenerator”不可迭代
    以前(一周前)我与Firestore通信的Python代码工作得很好。但今天我又开始研究它,它在迭代collection.stream()service_account=credentials.Certificate('credential/serviceAccount.json')firebase_admin.initialize_app(service_account)firestore_d......
  • 从 DOCKER 下的共享卷在 Linux 中执行 PyInstaller 生成的文件时出现 Python 子进程 F
    我已经使用PyInstaller生成了一个可执行文件,例如test(没有扩展名,因为它是Linux)并将其存储在一个目录中,例如data我有一个Python程序,如下所示:importsubprocessfrompathlibimportPath...defrun_exe():try:#getcurrentdirectory......
  • 从源代码安装 python3.5 后如何修复 virtualenv 的 python pip 分段错误(核心转储)响应
    背景嗨,我的主要目标是为许多使用旧版本Python的项目创建一个virtualenv,这些项目与系统版本(3.10.x)是分开的。我是使用PopOS22.04并进行所有更新。由于此错误,我什至无法使用pip。我也阅读了周围的内容,但我读到的所有解决方案要么输出日志文件,要么......
  • 无法使用适用于 Azure AI 搜索的 Python SDK 将数据添加到 ComplexField
    我想将带有嵌套字典的有效负载上传到AzureAI搜索索引。我在索引中使用ComplexField作为负载中的嵌套字典。索引无法识别嵌套字典,并且出现空错误。这是我的代码:ComplexField,CorsOptions,SearchIndex,ScoringProfile,SearchFieldDataType,Sim......
  • 如何使用 Python 从 Square 中的创建客户方法中检索客户 ID
    我正在square创建一个客户并得到如下结果。我需要的是获取客户的id。我的代码:fromsquare.clientimportClientclient=Client(access_token=settings.SQUARE_ACCESS_TOKEN,environment=settings.SQUARE_ENVIRONMENT,)api_customers=client.customers......
  • 为什么从.导入Python
    我使用的存储库的结构如下:在myrepo/src/中有:主要.pycore.py和somepkgsomepkg有init.py和其他python文件。somepkg不是任何文件中的类或函数。在main.py中,我看到:from.importcorefrom.importsomepkg我的问题是from和.......
  • 使用 Python 中的 Square API 检索客户 ID
    我正在为Square开发一个客户创建表单,它将创建一个客户,然后立即检索他们的ID以在程序中进一步使用。但是,我不知道如何使用API来过滤使用list_customers命令返回的数据。我找到了这篇文章:HowtoretrievecustomeridfromcreatecustomermethodinSquareusing......
  • 如何通过在字符串中使用 \u 或 \U 转义来正确表示 python3 (3.6.1+) 中的补充 unico
    最近我正在学习python,在python3中遇到了unicode转义文字的问题。似乎像Java一样,\u转义被解释为Java使用的UTF-16代码点,但问题来了:例如,如果我尝试放置3个字节的utf-8字符,例如“♬”(https://unicode-table.com/en/266C/),甚至是补充unicode字符,例如“......
  • 我的 Python 代码和 Cycle Time 小部件之间的平均周期时间不同
    我过去遇到过如何在周期时间小部件中计算平均周期时间的一些问题,因此我决定使用Python进行分析,看看是否找到任何方法来计算平均周期时间并获得相同的结果周期时间小部件中显示的值。我的问题是我无法达到周期时间小部件中显示的相同的平均周期时间值。你们能帮我解决这......
  • python3之requests库使用
    使用https://www.cnblogs.com/caroline2016/p/17007956.html建立的api测试下requests库怎么使用。模拟登录时laravelapi那边出现了 Sessionstorenotsetonrequest.错误。解决办法在app/Http/Kernel.php中api中间件组中添加两行代码:<?phpprotected$middlewareGrou......