我尝试使用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
任何人都可以告诉我为什么会这样吗?以及如何解决它?
谢谢!
答案 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