转换pandas DataFrame为JSON数组时出现‘only size-1 arrays can be converted to Python scalars’错误
问题描述
我尝试读取CSV文件并将其内容转换为JSON数组,但遇到错误:TypeError: only size-1 arrays can be converted to Python scalars。
CSV文件内容
4.4.4.4 5.5.5.5
我的代码
import numpy as np import pandas as pd import json # 原代码遗漏了json导入 df1 = pd.read_csv('/Users/Documents/datasetfiles/test123.csv', header=None) # df1.head(5)的输出: # 0 # 0 4.4.4.4 # 1 5.5.5.5 df_to_array = np.array(df1) app_json = json.dumps(df_to_array, default=int)
出现的错误
TypeError: only size-1 arrays can be converted to Python scalars
期望输出
["4.4.4.4", "5.5.5.5", "3.3.3.3"]
已尝试的方法
- 使用
np.array(df1)将DataFrame转换为numpy数组 - 使用带
default=int参数的json.dumps()
疑问
- 为何会出现该错误?
- 将DataFrame转换为JSON字符串数组的正确方法是什么?
问题解答
错误原因
- numpy数组结构不匹配:
np.array(df1)生成的是二维数组(形状为(2,1)),而json.dumps无法直接序列化二维numpy数组。 - default参数误用:你加的
default=int是让JSON序列化器遇到无法处理的对象时尝试转成整数,但二维数组里的每个元素是单元素子数组(比如array(['4.4.4.4'], dtype=object)),int()无法将这种多元素数组转成整数,因此抛出错误。而且你的数据是IP字符串,完全不需要转整数,这个参数属于画蛇添足。
正确方法
方法一:用pandas内置方法(最简)
直接提取目标列转成Python列表,再序列化:
import pandas as pd import json df1 = pd.read_csv('/Users/Documents/datasetfiles/test123.csv', header=None) app_json = json.dumps(df1[0].tolist()) print(app_json) # 输出:["4.4.4.4","5.5.5.5"]
方法二:直接遍历DataFrame
不需要转numpy数组,直接从DataFrame提取数据:
import pandas as pd import json df1 = pd.read_csv('/Users/Documents/datasetfiles/test123.csv', header=None) ip_list = [row[0] for _, row in df1.iterrows()] app_json = json.dumps(ip_list) print(app_json)
方法三:处理numpy数组(不推荐,多此一举)
如果非要用numpy数组,先把二维数组扁平化转成一维,再转列表:
import numpy as np import pandas as pd import json df1 = pd.read_csv('/Users/Documents/datasetfiles/test123.csv', header=None) df_to_array = np.array(df1).flatten().tolist() app_json = json.dumps(df_to_array) print(app_json)
内容的提问来源于stack exchange,提问作者pythonNinja
相关产品推荐
相关产品推荐

