首页 > 解决方案 > 读取大型文本文件时数据类型错误

问题描述

我正在尝试使用 pandas读取以下文件。我正在使用的代码如下:

df = pd.read_csv("household_power_consumption.txt", header=0, delimiter=';', nrows=5)

df.info() 给出了正确的输出。

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 9 columns):
Date                     5 non-null object
Time                     5 non-null object
Global_active_power      5 non-null float64
Global_reactive_power    5 non-null float64
Voltage                  5 non-null float64
Global_intensity         5 non-null float64
Sub_metering_1           5 non-null float64
Sub_metering_2           5 non-null float64
Sub_metering_3           5 non-null float64
dtypes: float64(7), object(2)
memory usage: 440.0+ bytes

但是当我尝试使用相同的代码读取整个数据集时,除了nrows

df_all = pd.read_csv("household_power_consumption.txt", header=0, delimiter=';')列类型正在成为对象。

<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 2075259 entries, 2006-12-16 17:24:00 to 2010-11-26 21:02:00
Data columns (total 7 columns):
Global_active_power      object
Global_reactive_power    object
Voltage                  object
Global_intensity         object
Sub_metering_1           object
Sub_metering_2           object
Sub_metering_3           float64
dtypes: float64(1), object(6)
memory usage: 126.7+ MB

谁能告诉我为什么会这样?以及如何解决?

谢谢!

标签: pythonpandas

解决方案


我的猜测是,当您读取其中的完整数据集时,附加行中的值被解释为不同的数据类型,例如浮点数被解释为整数。dtype您可以使用参数显式指定数据类型- 请参阅此处read_csv的文档。

或者,您可以尝试在加载数据后强制数据类型;比如像这样:

df["Global_active_power"] = df["Global_active_power"].astype(float)

推荐阅读