Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.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数据表库)正确转换为数据帧_Python_Pandas_Dataframe_Csv_Py Datatable - Fatal编程技术网

如何将整数数据表(从Python数据表库)正确转换为数据帧

如何将整数数据表(从Python数据表库)正确转换为数据帧,python,pandas,dataframe,csv,py-datatable,Python,Pandas,Dataframe,Csv,Py Datatable,我使用PythonDataTable()来读取只包含整数值的csv文件。之后,我将datatable转换为Dataframe。在转换时,仅包含0/1的列被视为布尔值而不是整数 让以下csv文件(小文件\u csv\u test.csv): 结果: | a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 -- + -- -- -- -- -- -- -- -- -- --- 0 | 1 1 1 1 1 1 1 0

我使用PythonDataTable()来读取只包含整数值的csv文件。之后,我将datatable转换为Dataframe。在转换时,仅包含0/1的列被视为布尔值而不是整数

让以下csv文件(小文件\u csv\u test.csv):

结果:

| a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 -- + -- -- -- -- -- -- -- -- -- --- 0 | 1 1 1 1 1 1 1 0 1 1 1 | 2 2 2 2 2 2 2 1 0 1 2 | 3 3 3 3 3 3 3 0 0 1 3 | 4 4 4 4 4 4 4 1 0 0 4 | 5 5 5 5 5 5 5 0 0 0 |a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 -- + -- -- -- -- -- -- -- -- -- --- 0 | 1 1 1 1 1 1 1 0 1 1 1 | 2 2 2 2 2 2 2 1 0 1 2 | 3 3 3 3 3 3 3 0 0 1 3 | 4 4 4 4 4 4 4 1 0 0 4 | 5 5 5 5 5 5 5 0 0 0 [5行x 10列]

a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 0 1 1 1 1 1 1 1 False True True 1 2 2 2 2 2 2 2 True False True 2 3 3 3 3 3 3 3 False False True 3 4 4 4 4 4 4 4 True False False 4 5 5 5 5 5 5 5 False False False a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 0 1 1 1假-真-真 1 2 2 2 2对错对 2 3 3 3 3假假真 3 4 4 4 4对错错 4555555假假假假 编辑1:列a8、a9和a10不正确,我希望它们是整数值,而不是布尔值


谢谢您的帮助。

您可以将每一列强制设置为int64:

matrix = data.to_pandas().astype('int64')

您始终可以推入数据类型

df = pd.DataFrame({"a1":[1,2,3,4,5,6,7,8,9,0],"a2":[1,2,3,4,5,6,7,8,9,0],"a3":[1,2,3,4,5,6,7,8,9,0],"a4":[1,2,3,4,5,6,7,8,9,0],"a5":[1,2,3,4,5,6,7,8,9,0],"a6":[1,2,3,4,5,6,7,8,9,0],"a7":[1,2,3,4,5,6,7,8,9,0],"a8":[0,1,0,1,0,0,1,1,1,1],"a9":[1,0,0,0,0,0,1,1,1,0],"a10":[1,1,1,0,0,0,0,1,1,1]})
df = df.astype({c:"int64" for c in df.columns})
df.dtypes



将此代码与代码片段一起添加

matrix=matrix.iloc[:].astype(int)
矩阵
输出:

a1 a2 a3 a4 a5 a6 a7 a8 a9 a10
0   1   1   1   1   1   1   1   0   1   1
1   2   2   2   2   2   2   2   1   0   1
2   3   3   3   3   3   3   3   0   0   1
3   4   4   4   4   4   4   4   1   0   0
4   5   5   5   5   5   5   5   0   0   0
5   6   6   6   6   6   6   6   0   0   0
您可以执行以下操作:

import datatable as dt
x = dt.Frame({"a": ["1", "2", "3"], "b":["20", "30", "40"]})
x.stypes
#(stype.str32, stype.str32)
x[:,:] = dt.int64
x.stypes
#(stype.int64, stype.int64)

您想要布尔格式的a8、a9和a10的输出吗?我想要它们作为int值而不是布尔值。第一列是正确的,但是只包含1和0的ons被转换为布尔值。因此,包含数字的a1到a7不需要转换,而a8到a10只包含0和1,这就是为什么将这些列转换为布尔值。如果我错了,请纠正我整个矩阵只包含从a1到a10的整数值。我不转换任何特定列。将矩阵从datatable转换为panda Dataframe的方法“to_pandas()”似乎无法正确转换仅包含1和0的列。它认为它们是布尔型的。所以我不知道“to_pandas()”方法是否有特定的参数来告诉我只需要整数值而不是布尔值。非常感谢。我使用.astype('int32'),它的工作:)非常感谢您的帮助和评论:),是的,您的解决方案工作。正如我所说,我从csv文件(非常大的csv文件)中读取矩阵,因此我使用datable,之后我转换为panda Dataframe。所以我不能手动操作。但是,指定工作类型的想法。谢谢你的帮助:)我刚看了一下,它少了一些我期待的东西。在读取时定义列类型。我打赌这是
datatable
定义类型,然后将其传递给pandas,并将
传递给\u pandas()
数据表fread自动检测类型,在我的代码示例中,它工作正常。我的问题是转换为pandas dataframe时,建议的解决方案是使用“matrix=data.to_pandas().astype('int32')”。如果我们考虑一下,0和1可以被视为false和true,因此当我们指定类型时,混淆就消失了。是的,它也解决了问题,非常感谢。在我的例子中(与问题帖子相关),
x.stypes
给出了(stype.int32,…,stype.bool8,stype.bool8,stype.bool8),然后我使用
x[:,:]=dt.int32
,是的,问题得到了解决。一个重要的注意:当csv文件中的值准备就绪时,类型问题就会出现。当您在源代码中硬编码值时,按照您的操作方式,它会给出int值,而不是bool值,您可以使用
“c:[“0”,“1”,“0”]”
进行尝试。
df = pd.DataFrame({"a1":[1,2,3,4,5,6,7,8,9,0],"a2":[1,2,3,4,5,6,7,8,9,0],"a3":[1,2,3,4,5,6,7,8,9,0],"a4":[1,2,3,4,5,6,7,8,9,0],"a5":[1,2,3,4,5,6,7,8,9,0],"a6":[1,2,3,4,5,6,7,8,9,0],"a7":[1,2,3,4,5,6,7,8,9,0],"a8":[0,1,0,1,0,0,1,1,1,1],"a9":[1,0,0,0,0,0,1,1,1,0],"a10":[1,1,1,0,0,0,0,1,1,1]})
df = df.astype({c:"int64" for c in df.columns})
df.dtypes


import datatable as dt
x = dt.Frame({"a": ["1", "2", "3"], "b":["20", "30", "40"]})
x.stypes
#(stype.str32, stype.str32)
x[:,:] = dt.int64
x.stypes
#(stype.int64, stype.int64)