Python 按列号更改多列的数据类型

Python 按列号更改多列的数据类型,python,pandas,multiple-columns,dtype,Python,Pandas,Multiple Columns,Dtype,我想更改一个数据帧的数据类型,我将使用python来阅读它。我知道我可以通过列名更改数据类型,如下所示: df = pd.read_csv("blablab.csv", dtype = {"Age":int} import pandas as pd df = pd.DataFrame({'a': ['a', 'b', 'c'], 'b': ['c', 'd', 'e'], 'c' : ['1','2','3'],'d' : ['4','5','6'

我想更改一个数据帧的数据类型,我将使用python来阅读它。我知道我可以通过列名更改数据类型,如下所示:

    df = pd.read_csv("blablab.csv", dtype = {"Age":int}
import pandas as pd
df = pd.DataFrame({'a': ['a', 'b', 'c'], 'b': ['c', 'd', 'e'],
                   'c' : ['1','2','3'],'d' : ['4','5','6']})
df[df.columns[2:]] = df[df.columns[2:]].astype(float)
df['c']
但是,我想通过列号设置数据类型。例如,第1、3、5列到“datetime”,第6列的数据类型直到最后一列到数据类型“float”。是否有类似于:

    df = pd.read_csv("blablab.csv", dtype = {1,3,5: datetime64, 6-end: float64}

非常感谢,非常感谢您的帮助

一种方法是在创建
数据帧后更改类型,如下所示:

    df = pd.read_csv("blablab.csv", dtype = {"Age":int}
import pandas as pd
df = pd.DataFrame({'a': ['a', 'b', 'c'], 'b': ['c', 'd', 'e'],
                   'c' : ['1','2','3'],'d' : ['4','5','6']})
df[df.columns[2:]] = df[df.columns[2:]].astype(float)
df['c']
输出:

0    1.0
1    2.0
2    3.0
Name: c, dtype: float64

在这里,我将最后两列的类型更改为
float

,我建议您在导入之前构建dtype变量,方法是导入一行,以便对默认类型进行默认dict理解,然后将列修改为特殊类型。我使用StringIO只是为了运行下面的测试用例

import pandas as pd
import numpy as np
from io import StringIO

dummyCSV = """header 1,header 2,header 3
1,2,3
4,5,6
7,8,9
11,12,13
14,15,16"""

blabblab_csv = StringIO(dummyCSV, newline='\n')
limitedRead = pd.read_csv(blabblab_csv, sep=",", nrows = 1)

#set a default type and populate all column types
defaultType = np.float64
dTypes = {key: defaultType for key in list(limitedRead.columns)}
#then override the columns you want, using the integer position
dTypes[limitedRead.columns[1]] = np.int32

blabblab_csv = StringIO(dummyCSV, newline='\n') #reset virtual file
fullRead = pd.read_csv(blabblab_csv, sep=",", dtype = dTypes)

我知道这对你来说可能有点晚了,但我只是为了一个我正在进行的项目才这么做,所以希望下一次搜索到这个主题时,会有一个答案等待着他们。

谢谢你的回答。由于性能问题,我需要在创建数据帧之前更改数据类型。