Python 3.x Can';t似乎不使用pandas来读取csv和读取csv来正确读取numpy数组
问题似乎源于我在尝试对nparray执行操作时读取csv,而read_csv存在类型问题。以下是一个最低限度的工作示例Python 3.x Can';t似乎不使用pandas来读取csv和读取csv来正确读取numpy数组,python-3.x,pandas,numpy,Python 3.x,Pandas,Numpy,问题似乎源于我在尝试对nparray执行操作时读取csv,而read_csv存在类型问题。以下是一个最低限度的工作示例 x = np.array([0.83151197,0.00444986]) df = pd.DataFrame({'numpy': [x]}) np.array(df['numpy']).mean() Out[151]: array([ 0.83151197, 0.00444986]) 这正是我所期望的。但是,如果我将结果写入一个文件,然后将数据读回一个数据帧,则类型将被
x = np.array([0.83151197,0.00444986])
df = pd.DataFrame({'numpy': [x]})
np.array(df['numpy']).mean()
Out[151]: array([ 0.83151197, 0.00444986])
这正是我所期望的。但是,如果我将结果写入一个文件,然后将数据读回一个数据帧,则类型将被破坏
x = np.array([0.83151197,0.00444986])
df = pd.DataFrame({'numpy': [x]})
df.to_csv('C:/temp/test5.csv')
df5 = pd.read_csv('C:/temp/test5.csv', dtype={'numpy': object})
np.array(df5['numpy']).mean()
TypeError:/:“str”和“long”的操作数类型不受支持
以下是“df5”对象的输出
以下是文件内容:
,numpy
0,[ 0.83151197 0.00444986]
我找到的唯一方法是读取数据并手动转换类型,这看起来既愚蠢又缓慢
[float(num) for num in df5['numpy'][0][1:-1].split()]
是否仍有避免上述情况的方法?pd.DataFrame({'col\u name':data})
需要与数据类似的一维数组对象:
In [63]: pd.DataFrame({'numpy': [0.83151197,0.00444986]})
Out[63]:
numpy
0 0.831512
1 0.004450
In [64]: pd.DataFrame({'numpy': np.array([0.83151197,0.00444986])})
Out[64]:
numpy
0 0.831512
1 0.004450
您已经用[]
包装了numpy数组,因此传递了一个numpy数组列表:
In [65]: pd.DataFrame({'numpy': [np.array([0.83151197,0.00444986])]})
Out[65]:
numpy
0 [0.83151197, 0.00444986]
将df=pd.DataFrame({'numpy':[x]})
替换为df=pd.DataFrame({'numpy':x})
演示:
pd.DataFrame({'col\u name':data})
需要一个与数据类似的1D数组:
In [63]: pd.DataFrame({'numpy': [0.83151197,0.00444986]})
Out[63]:
numpy
0 0.831512
1 0.004450
In [64]: pd.DataFrame({'numpy': np.array([0.83151197,0.00444986])})
Out[64]:
numpy
0 0.831512
1 0.004450
您已经用[]
包装了numpy数组,因此传递了一个numpy数组列表:
In [65]: pd.DataFrame({'numpy': [np.array([0.83151197,0.00444986])]})
Out[65]:
numpy
0 [0.83151197, 0.00444986]
将df=pd.DataFrame({'numpy':[x]})
替换为df=pd.DataFrame({'numpy':x})
演示:
对象
=无转换。这些类型基本上都是字符串。您需要将eval convert对象转换为list@cᴏʟᴅsᴘᴇᴇᴅ 我使用了dtype作为dtype={'numpy':np.float64}
但是getValueError:无法将字符串转换为float:[0.83151197 0.00444986]
显示文件内容和df5对象。@hpaulj添加到原始帖子中,以便其他人可以看到它。对象
=无转换。这些类型基本上都是字符串。您需要将eval convert对象转换为list@cᴏʟᴅsᴘᴇᴇᴅ 我使用了dtype作为dtype={'numpy':np.float64}
但是getValueError:无法将字符串转换为float:[0.83151197 0.00444986]
显示文件内容和df5对象。@hpaulj添加到原始帖子中,以便其他人可以看到它。似乎有同样的问题。谢谢,但我实际上需要数组。我的数据最终将成为文件1、[value1、value2、value3、value3]文件2、[value4、value4、value5、value6]
。按照您建议的方式进行计算将使计算变得更加困难,因为我最终将不得不对value1和value4(平均值、标准差等)、Value2和value4、value3和value5等的值进行统计。@KevinVasko,您的所有列是否都包含列表,还是只包含其中的一部分?@KevinVasko,我不建议您将列表、dict、set等复杂对象存储在Pandas单元格中-您将失去灵活性,大多数矢量化函数将无法处理此类列…这是目前唯一一个包含数组的函数。似乎存在相同的问题。谢谢,但我实际上需要数组。我的数据最终将成为文件1、[value1、value2、value3、value3]文件2、[value4、value4、value5、value6]
。按照您建议的方式进行计算将使计算变得更加困难,因为我最终将不得不对value1和value4(平均值、标准差等)、Value2和value4、value3和value5等的值进行统计。@KevinVasko,您的所有列是否都包含列表,还是只包含其中的一部分?@KevinVasko,我不建议您将列表、dict、set等复杂对象存储在Pandas单元格中-您将失去灵活性,大多数矢量化函数将无法处理此类列…这是当前唯一包含数组的函数。