我想更改要使用python pandas读取的数据框的dtype。我知道我可以通过如下列名更改dtype:
df = pd.read_csv("blablab.csv", dtype = {"Age":int}
但是,我想通过列号设置dtype。例如。第1、3、5列改为“ datetime”,第6列的dtype直到最后一个列的dtype为“ float”。是否有类似的东西:
df = pd.read_csv("blablab.csv", dtype = {1,3,5: datetime64, 6-end: float64}
非常感谢,非常感谢您的帮助!
答案 0 :(得分:1)
我建议通过在导入之前构建一行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)
我知道对您来说可能有点晚了,但是我只需要对我正在研究的项目进行此操作,因此希望下次搜索到该主题的人会得到答案,等待他们。
答案 1 :(得分:0)
一种方法是在创建DataFrame
之后更改类型,如下所示:
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