python - 读取大型文本文件时数据类型错误
问题描述
我正在尝试使用 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
谁能告诉我为什么会这样?以及如何解决?
谢谢!
解决方案
我的猜测是,当您读取其中的完整数据集时,附加行中的值被解释为不同的数据类型,例如浮点数被解释为整数。dtype
您可以使用参数显式指定数据类型- 请参阅此处read_csv
的文档。
或者,您可以尝试在加载数据后强制数据类型;比如像这样:
df["Global_active_power"] = df["Global_active_power"].astype(float)
推荐阅读
- python - 追加数据框以将新数据添加到现有列
- google-app-engine - 将 AppEngine 从 golang 1.9 升级到 1.12 后连接到 GCP Datastore 的问题
- r - 掷三个骰子的排列测试,边以二进制方式标记
- javascript - javascript runat 服务器箭头功能不起作用
- javascript - 媒体流未显示在浏览器中,尽管浏览器似乎访问了摄像头
- c - 在函数外访问结构数组
- mysql - MySQL对主键强制过滤使查询更快
- mongodb - 数据聚合中的 Mongodb $lookup - localField 属性字符问题
- r - 基于另一个数据表的单元格选择子集数据表
- php - 为什么 Laravel 实例化一个类来获取一个属性,而不是将该属性设置为静态?