读取大型文本文件时数据类型错误

时间:2018-05-21 17:17:56

标签: python pandas

我尝试使用pandas阅读以下file。我使用的代码如下:

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

任何人都可以告诉我为什么会这样吗?以及如何解决它?

谢谢!

1 个答案:

答案 0 :(得分:1)

我的猜测是,当您读取完整数据集时,其他行中的值将被解释为不同的数据类型,例如浮点数被解释为整数。您可以使用 <searchComponent name="elevator" class="solr.QueryElevationComponent" > <str name="queryFieldType">text_general</str> <str name="config-file">elevate.xml</str> <str name="forceElevation">true</str> <str name="exclusive">true</str> <str name="editorialMarkerFieldName">test_elevated</str> </searchComponent> <requestHandler name="/elevate" class="solr.SearchHandler" startup="lazy"> <lst name="defaults"> <str name="echoParams">explicit</str> <str name="defType">edismax</str> <int name="rows">3</int> <str name="fl">id,title,subtitle,course_code,cricos_code,course_introduction,outcome,page_url,[test_elevated],score</str> <str name="q.alt">*:*</str> </lst> <arr name="last-components"> <str>elevator</str> </arr> </requestHandler> 中的dtype参数明确指定数据类型 - 请参阅文档here

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

read_csv