【发布时间】:2013-09-30 23:40:54
【问题描述】:
我想为 pandas read_csv 指定数据类型。下面快速浏览一些在指定类型时有效但无效的东西。为什么后者不起作用?
import io
import pandas as pd
csv = """foo,1234567,a,1
foo,2345678,b,3
bar,3456789,b,5
"""
df = pd.read_csv(io.StringIO(csv),
names=["fb", "num", "loc", "x"])
print(df)
df = pd.read_csv(io.StringIO(csv),
names=["fb", "num", "loc", "x"],
dtype=["|S3", "np.int64", "|S1", "np.int8"])
print(df)
我进行了更新,以使其更简单,并且希望更清楚地了解 BrenBarn 的建议。我的真实数据集要大得多,但我想使用该方法在导入时为我的所有数据生成类型。
【问题讨论】:
-
您是否尝试过制作更简单的数据集并尝试仅使用一种或两种数据类型来查看是哪一种导致了问题?
-
我会这样做,尽管它现在抛出的错误表明(对我的新手来说)我没有正确指定,而不是我的规范和数据之间存在不匹配。但我会试一试并报告!
-
pandas 会将指定的字符串 dtype,如
S20转换为代表字符串类型的objectdtype。为什么这是个问题?这是表示可变长度字符串的标准方式(实际上比固定的S20dtype 更有效) -
@Jeff 哦,酷。所以如果
object比string_类型更有效,那么我对那件作品很满意。不过,我想将所有整数类型指定为int32或更少,而不是int64。我想我可以尝试在导入后转换它们。 -
见docs,基本上是
dtype = { 'column_1' : np.int32, 'column_2' : np.int64 }。您不需要指定对象,因为对于类似字符串的列会自动发生这种情况