Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 来自numpy结构化阵列的熊猫DF:can';无法获取列(仅对象)的unicode或字符串类型_Python_Numpy_Pandas - Fatal编程技术网

Python 来自numpy结构化阵列的熊猫DF:can';无法获取列(仅对象)的unicode或字符串类型

Python 来自numpy结构化阵列的熊猫DF:can';无法获取列(仅对象)的unicode或字符串类型,python,numpy,pandas,Python,Numpy,Pandas,我从软件系统中提取数据,这给了我一个numpy结构的数组。我将其转换为pandas数据帧来完成工作,然后需要将其转换回结构化数组,以便将其推回到原始系统中。字符串/文本数据在数组中显示为unicode列,并在DF中描述为对象。我一直在试图找出如何在DF甚至是结束数组中将其恢复为unicode或字符串,但遇到了麻烦。为了只问一个问题,如何将DF列的数据类型设置为unicode/string 以下是我正在尝试的内容,“区域”一栏是我关注的重点: import pandas as pd import

我从软件系统中提取数据,这给了我一个numpy结构的数组。我将其转换为pandas数据帧来完成工作,然后需要将其转换回结构化数组,以便将其推回到原始系统中。字符串/文本数据在数组中显示为unicode列,并在DF中描述为对象。我一直在试图找出如何在DF甚至是结束数组中将其恢复为unicode或字符串,但遇到了麻烦。为了只问一个问题,如何将DF列的数据类型设置为unicode/string

以下是我正在尝试的内容,“区域”一栏是我关注的重点:

import pandas as pd
import numpy as np
arr = array([(1, u'01', 7733855, 0), (2, u'01', 7733919, 1244),
       (3, u'01', 7732571, 1236), (4, u'01', 7732387, 1234),
       (5, u'01', 7733327, 1239), (6, u'01', 7733755, 1241),
       (7, u'01', 7732571, 1236), (8, u'01', 7733923, 0),
       (9, u'01', 7733327, 1239), (10, u'01', 7733755, 1241)], 
      dtype=[('hru_id_nat', '<i4'), ('region', '<U255'), ('POI_ID', '<i4'), ('hru_segment', '<i4')])
显示“区域”有一个
对象
数据类型:

hru_id_nat      int32
region         object
POI_ID          int32
hru_segment     int32
dtype: object
我尝试在转换为DF时指定数据类型,但没有完全得到:

n = list(arr.dtype.names)
t = [i[0].name for i in arr.dtype.fields.values()]
dt = [(i, j) for i, j in zip(n, t)]
dt
获取:

[('hru_id_nat', 'int32'),
 ('region', 'unicode8160'),
 ('POI_ID', 'int32'),
 ('hru_segment', 'int32')]
当我尝试使用dt规范创建DF时,这会抛出一个错误

df = pd.DataFrame(arr, dt)
如果我尝试以下方法,则没有帮助:

dt[1] = ('region', 'unicode')
dt[1] = ('region', 'str')
dt[1] = ('region', np.str)
我还尝试了
convert_type()
(基于)和
df['region']=df['region'].astype(np.str)
(基于),但两者似乎都没有改变df报告的数据类型


非常感谢您的帮助。

查看文档

下面是我用来测试它的代码:

import pandas as pd
import numpy as np
arr = pd.DataFrame(data=[(1, u'01', 7733855, 0), (2, u'01', 7733919, 1244),
       (3, u'01', 7732571, 1236), (4, u'01', 7732387, 1234),
       (5, u'01', 7733327, 1239), (6, u'01', 7733755, 1241),
       (7, u'01', 7732571, 1236), (8, u'01', 7733923, 0),
       (9, u'01', 7733327, 1239), (10, u'01', 7733755, 1241)],) 

print arr, '\n', arr.dtypes
arr = arr.astype('string')
arr = arr.astype('int')
print arr.values, '\n', arr.dtypes
输出是


astype为我工作。我的版本是python 2.7.6.0.13.1和numpy 1.8.2,请查看文档

下面是我用来测试它的代码:

import pandas as pd
import numpy as np
arr = pd.DataFrame(data=[(1, u'01', 7733855, 0), (2, u'01', 7733919, 1244),
       (3, u'01', 7732571, 1236), (4, u'01', 7732387, 1234),
       (5, u'01', 7733327, 1239), (6, u'01', 7733755, 1241),
       (7, u'01', 7732571, 1236), (8, u'01', 7733923, 0),
       (9, u'01', 7733327, 1239), (10, u'01', 7733755, 1241)],) 

print arr, '\n', arr.dtypes
arr = arr.astype('string')
arr = arr.astype('int')
print arr.values, '\n', arr.dtypes
输出是


astype为我工作。我的版本是python 2.7.6.0.13.1和numpy 1.8.2,请查看文档

下面是我用来测试它的代码:

import pandas as pd
import numpy as np
arr = pd.DataFrame(data=[(1, u'01', 7733855, 0), (2, u'01', 7733919, 1244),
       (3, u'01', 7732571, 1236), (4, u'01', 7732387, 1234),
       (5, u'01', 7733327, 1239), (6, u'01', 7733755, 1241),
       (7, u'01', 7732571, 1236), (8, u'01', 7733923, 0),
       (9, u'01', 7733327, 1239), (10, u'01', 7733755, 1241)],) 

print arr, '\n', arr.dtypes
arr = arr.astype('string')
arr = arr.astype('int')
print arr.values, '\n', arr.dtypes
输出是


astype为我工作。我的版本是python 2.7.6.0.13.1和numpy 1.8.2,请查看文档

下面是我用来测试它的代码:

import pandas as pd
import numpy as np
arr = pd.DataFrame(data=[(1, u'01', 7733855, 0), (2, u'01', 7733919, 1244),
       (3, u'01', 7732571, 1236), (4, u'01', 7732387, 1234),
       (5, u'01', 7733327, 1239), (6, u'01', 7733755, 1241),
       (7, u'01', 7732571, 1236), (8, u'01', 7733923, 0),
       (9, u'01', 7733327, 1239), (10, u'01', 7733755, 1241)],) 

print arr, '\n', arr.dtypes
arr = arr.astype('string')
arr = arr.astype('int')
print arr.values, '\n', arr.dtypes
输出是

astype为我工作。我的版本是python 2.7.6.0.13.1和numpy 1.8.2,除非我误解了(这是完全可能的),否则我认为您有一个。。。。熊猫数据帧永远不会告诉您它有任何数据类型为“unicode”的数据。但您的unicode数据完全安全地存储为“对象”。所有字符串数据都存储为“对象”数据类型

从数据帧转换后返回unicode数据类型的问题应该不难。当我获取您的数据帧并使用
to_records
方法将其转换时,我将您的字符串数据(“区域”)作为类型
'O'
,这可能就是您所做的:

>>> a = df.to_records()
>>> a
rec.array([(0L, 1, u'01', 7733855, 0), (1L, 2, u'01', 7733919, 1244),
       (2L, 3, u'01', 7732571, 1236), (3L, 4, u'01', 7732387, 1234),
       (4L, 5, u'01', 7733327, 1239), (5L, 6, u'01', 7733755, 1241),
       (6L, 7, u'01', 7732571, 1236), (7L, 8, u'01', 7733923, 0),
       (8L, 9, u'01', 7733327, 1239), (9L, 10, u'01', 7733755, 1241)], 
      dtype=[('index', '<i8'), ('hru_id_nat', '<i4'), ('region', 'O'), ('POI_ID', '<i4'), ('hru_segment', '<i4')])
>a=df.to_记录()
>>>a
记录阵列([(0L,1,u'01',7733855,0),(1L,2,u'01',7733919,1244),
(2L,3,u'01',77325711236),(3L,4,u'01',77323871234),
(4L,5,u'01',7733327239),(5L,6,u'01',77337551241),
(6L,7,u'01',77325711236),(7L,8,u'01',7733923,0),
(8L,9,u'01',7733327239),(9L,10,u'01',77337551241)],
dtype=[('index',',除非我误解了(这完全有可能),否则我认为您在这里有一个…pandas数据帧不会告诉您它有任何数据类型为'unicode'。但是您的unicode数据完全安全地存储为'object'。所有字符串数据都存储为'object'数据类型

从数据帧转换后返回unicode数据类型的问题应该不难。当我获取您的数据帧并使用
到_records
方法将其转换时,我将您的字符串数据(“区域”)作为类型
'O'
,这可能是您所做的:

>>> a = df.to_records()
>>> a
rec.array([(0L, 1, u'01', 7733855, 0), (1L, 2, u'01', 7733919, 1244),
       (2L, 3, u'01', 7732571, 1236), (3L, 4, u'01', 7732387, 1234),
       (4L, 5, u'01', 7733327, 1239), (5L, 6, u'01', 7733755, 1241),
       (6L, 7, u'01', 7732571, 1236), (7L, 8, u'01', 7733923, 0),
       (8L, 9, u'01', 7733327, 1239), (9L, 10, u'01', 7733755, 1241)], 
      dtype=[('index', '<i8'), ('hru_id_nat', '<i4'), ('region', 'O'), ('POI_ID', '<i4'), ('hru_segment', '<i4')])
>a=df.to_记录()
>>>a
记录阵列([(0L,1,u'01',7733855,0),(1L,2,u'01',7733919,1244),
(2L,3,u'01',77325711236),(3L,4,u'01',77323871234),
(4L,5,u'01',7733327239),(5L,6,u'01',77337551241),
(6L,7,u'01',77325711236),(7L,8,u'01',7733923,0),
(8L,9,u'01',7733327239),(9L,10,u'01',77337551241)],
dtype=[('index',',除非我误解了(这完全有可能),否则我认为您在这里有一个…pandas数据帧不会告诉您它有任何数据类型为'unicode'。但是您的unicode数据完全安全地存储为'object'。所有字符串数据都存储为'object'数据类型

从数据帧转换后返回unicode数据类型的问题应该不难。当我获取您的数据帧并使用
到_records
方法将其转换时,我将您的字符串数据(“区域”)作为类型
'O'
,这可能是您所做的:

>>> a = df.to_records()
>>> a
rec.array([(0L, 1, u'01', 7733855, 0), (1L, 2, u'01', 7733919, 1244),
       (2L, 3, u'01', 7732571, 1236), (3L, 4, u'01', 7732387, 1234),
       (4L, 5, u'01', 7733327, 1239), (5L, 6, u'01', 7733755, 1241),
       (6L, 7, u'01', 7732571, 1236), (7L, 8, u'01', 7733923, 0),
       (8L, 9, u'01', 7733327, 1239), (9L, 10, u'01', 7733755, 1241)], 
      dtype=[('index', '<i8'), ('hru_id_nat', '<i4'), ('region', 'O'), ('POI_ID', '<i4'), ('hru_segment', '<i4')])
>a=df.to_记录()
>>>a
记录阵列([(0L,1,u'01',7733855,0),(1L,2,u'01',7733919,1244),
(2L,3,u'01',77325711236),(3L,4,u'01',77323871234),
(4L,5,u'01',7733327239),(5L,6,u'01',77337551241),
(6L,7,u'01',77325711236),(7L,8,u'01',7733923,0),
(8L,9,u'01',7733327239),(9L,10,u'01',77337551241)],
dtype=[('index',',除非我误解了(这完全有可能),否则我认为您在这里有一个…pandas数据帧不会告诉您它有任何数据类型为'unicode'。但是您的unicode数据完全安全地存储为'object'。所有字符串数据都存储为'object'数据类型

从数据帧转换后返回unicode数据类型的问题应该不难。当我获取您的数据帧并使用
到_records
方法将其转换时,我将您的字符串数据(“区域”)作为类型
'O'
,这可能是您所做的:

>>> a = df.to_records()
>>> a
rec.array([(0L, 1, u'01', 7733855, 0), (1L, 2, u'01', 7733919, 1244),
       (2L, 3, u'01', 7732571, 1236), (3L, 4, u'01', 7732387, 1234),
       (4L, 5, u'01', 7733327, 1239), (5L, 6, u'01', 7733755, 1241),
       (6L, 7, u'01', 7732571, 1236), (7L, 8, u'01', 7733923, 0),
       (8L, 9, u'01', 7733327, 1239), (9L, 10, u'01', 7733755, 1241)], 
      dtype=[('index', '<i8'), ('hru_id_nat', '<i4'), ('region', 'O'), ('POI_ID', '<i4'), ('hru_segment', '<i4')])
>a=df.to_记录()
>>>a
记录阵列([(0L,1,u'01',7733855,0),(1L,2,u'01',7733919,1244),
(2L,3,u'01',77325711236),(3L,4,u'01',77323871234),
(4L,5,u'01',7733327239),(5L,6,u'01',77337551241),
(6L,7,u'01',77325711236),(7L,8,u'01',7733923,0),
(8L,9,u'01',7733327239),(9L,10,u'01',77337551241)],
数据类型=[(“索引”,“澄清”