被 Pandas read_csv 坑了

被 Pandas read_csv 坑了

-- 不怕前路坎坷,只怕从一开始就走错了方向html

Pandas 是python的一个数据分析包,归入了大量库和一些标准的数据模型,提供了高效地操做大型数据集所需的工具。Pandas 就是为解决数据分析任务生的,不管是数据分析仍是机器学习项目数据预处理中, Pandas 无处不在。python

最近掉进一坑,差点铸成大错。实在没想到竟然栽在pandas.read_csv上了,这里分享一下,但愿你们注意。机器学习

另:业务数据不方便拿出来演示,为尽量复现,这里我手造了一份,另存为 income.csv 文件。工具

看起来都是正经的数据

翻船记

读取csv文件小菜一碟学习

import numpy as np
import pandas as pd
df = pd.read_csv(r'C:\...\income.csv',encoding='utf-8')

读好了看看数据信息吧:翻译

df.info()


RangeIndex: 6 entries, 0 to 5
Data columns (total 1 columns):
 #   Column  Non-Null Count  Dtype 
---  ------  --------------  ----- 
 0   income  6 non-null      object
dtypes: object(1)
memory usage: 176.0+ bytes

诶,怎么数据成了object?不该该是float吗?code

无论他,硬转一发htm

df=pd.DataFrame(df,dtype=np.float)

竟然报错了,1000被读成了字符串。
blog

其实这里我还掉进了另外一个坑,使用了一个已被弃用的 .convert_objects 方法。这种方法更硬,直接把string转成了NaN,因此后面各类操做流畅且错误地进行着....这都是 pandas 没升级的锅,按期检查升级包太有必要了(pip 的高阶玩法token

说回刚才的问题,1,000被读成了字符串是由于csv文件中它使用了千位分隔符。问题其实很是简单,设置一下 thousands 参数就好了

df2 = pd.read_csv(r'C:\...\income.csv',encoding='utf-8',thousands =',')

看一下info

df2.info()

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 6 entries, 0 to 5
Data columns (total 1 columns):
 #   Column  Non-Null Count  Dtype  
---  ------  --------------  -----  
 0   income  6 non-null      float64
dtypes: float64(1)

往下继续

df2.describe()

	    income
count	6.000000
mean	16934.983333
std	40695.203980
min	0.000000
25%	32.425000
50%	300.000000
75%	875.000000
max	100000.000000

一切正常!

pandas.read_csv()参数

pandas.read_csv()的参数特别多,除了filepath,其余都可缺省。参数的具体含义这里就不赘述,还想复习一下的同窗能够直接去看官方文档

http://pandas.pydata.org/pandas-docs/stable/io.html

英语很差的同窗能够看一下热心博主的翻译版:
http://www.javashuo.com/article/p-nmbkbeht-gm.html

相关文章
相关标签/搜索