pandas.read_csv用法(转)
的数据结构DataFrame,几乎可以对数据进行任何你想要的操作。
由于现实世界中数据源的格式非常多,pandas也支持了不同数据格式的导入方法,本文介绍pandas如何从csv文件中导入数据。
从上图可以看出,我们要做的工作就是把存储在csv格式中的数据读入并转换成DataFrame
格式。
pandas提供了一个非常简单的api函数来实现这个功能:read_csv()
。
1. 通过read_csv接口读入csv文件中的数据
下面是一个简单的示例:
import pandas as pd
CSV_FILE_PATH = './test.csv'
df = pd.read_csv(CSV_FILE_PATH)
print(df.head(5))
只要简单地指定csv文件的路径,便可以得到DataFrame
格式的数据df
。对于理想情况下的数据,导入过程就是这么简单!
下面考虑这种情况:假设csv文件头部有几个无效行,那么打印出来的结果可能如下所示:
1 2 3 4
0 datetime host hit volume
1 2018-07-24 09:00:00 weibo.com 20 1020
2 2018-07-25 09:00:00 qq.com no 20 1028
3 2018-07-26 19:00:00 sina.com 25 1181
4 2018-07-27 21:00:00 sohu.com 15 4582
pandas把【1,2,3,4】这组无效数据当作了column name;而实际上,我们更偏向于将【datetime,host,hit,volume】这组数据当作column name。对于这种情况,read_csv()
函数提供了一个参数:skiprows
,用于指定跳过csv文件的头部的前几行。在这里,我们跳过1行即可。
import pandas as pd
CSV_FILE_PATH = './test.csv'
df = pd.read_csv(CSV_FILE_PATH, skiprows=1)
print(df.head(5))
得到的结果如下所示:
datetime host hit volume
0 2018-07-24 09:00:00 weibo.com 20 1020
1 2018-07-25 09:00:00 qq.com no 20 1028
2 2018-07-26 19:00:00 sina.com 25 1181
3 2018-07-27 21:00:00 sohu.com 15 4582
2. 处理csv文件中的无效数据
pandas可以自动推断每个column的数据类型,以方便后续对数据的处理。还以上文中的数据为例,通过如下代码:
import pandas as pd
CSV_FILE_PATH = './test.csv'
df = pd.read_csv(CSV_FILE_PATH)
print(df.head(5))
print('datatype of column hit is: ' + str(df['hit'].dtypes))
得出的结果:
datetime host hit volume
0 2018-07-24 09:00:00 weibo.com 20 1020
1 2018-07-25 09:00:00 qq.com 20 1028
2 2018-07-26 19:00:00 sina.com 25 1181
3 2018-07-27 21:00:00 sohu.com 15 4582
datatype of column hit is: int64
pandas将hit
这一列的数据类型判定为了int64
,这显然方便未来我们对于该列数据的运算。
但是在实际情况中,我们经常会面临数据缺失的问题,如果出现这种情况,我们往往会用一些占位符来表达。假设,我们用missing
这个占位符来表示数据缺失,仍使用上述代码,来探索下会发生些什么:
datetime host hit volume
0 2018-07-24 09:00:00 weibo.com 20 1020
1 2018-07-25 09:00:00 qq.com 20 1028
2 2018-07-26 19:00:00 sina.com missing missing
3 2018-07-27 21:00:00 sohu.com 15 4582
datatype of column hit is: object
由于hit这一列中出现了missing
这个字符串,pandas将hit
这一列的数据类型判断成了object
。这会给我们对该列数据的运算带来影响。例如,假设我们要计算hit列前两行数据的和,代码如下:
print(df['hit'][0] + df['hit'][1])
结果是:
2020
本来我们想要的是数学运算结果,但得到的却是一个字符串拼接结果。这就是由于数据类型判断失误带来的严重影响。
对于这种情况,read_csv()
函数也提供了一个简单的处理方式,只需要通过na_value
参数指定占位符,pandas便会在读入数据的过程中自动将这些占位符转换成NaN
,从而不影响pandas对column数据类型的正确判断。
示例代码:
import pandas as pd
CSV_FILE_PATH = './test.csv'
df = pd.read_csv(CSV_FILE_PATH, skiprows=0, na_values=['missing')
print(df.head(5))
print('datatype of column hit is: ' + str(df['hit'].dtypes))
print(df['hit'][0] + df['hit'][1])
运行结果如下:
datetime host hit volume
0 2018-07-24 09:00:00 weibo.com 20.0 1020.0
1 2018-07-25 09:00:00 qq.com 20.0 1028.0
2 2018-07-26 19:00:00 sina.com NaN NaN
3 2018-07-27 21:00:00 sohu.com 15.0 4582.0
datatype of column hit is: float64
40.0
可以看到,pandas将数据集中的missing
单元全部转换为了NaN
,并成功判断出hit
这一列的数据类型。
3. 总结
通过一个简单的read_csv()
函数,实际可以做到如下几件事:
通过指定的文件路径,从本地读取csv文件,并将数据转换成
DataFrame
格式更正数据集的头部(column)
正确处理缺失数据
推断每一列的数据类型
当然,read_csv()
函数还有一系列其他参数来应对各种情况,遇到具体问题的同学可参考其接口指南。
转自:https://blog.csdn.net/O4dC8OjO7ZL6/article/details/81117442
pandas.read_csv用法(转)的更多相关文章
- pandas.read_csv() 部分参数解释
read_csv()所有参数 pandas.read_csv( filepath_or_buffer, sep=',', delimiter=None, header='infer', names=N ...
- API:详解 pandas.read_csv
pandas.read_csv 作为常用的读取数据的常用API,使用频率非常高,但是API中可选的参数有哪些呢? pandas项目代码 答案是: .read_csv(filepath_or_buffe ...
- pandas read_csv读取大文件的Memory error问题
今天在读取一个超大csv文件的时候,遇到困难:首先使用office打不开然后在python中使用基本的pandas.read_csv打开文件时:MemoryError 最后查阅read_csv文档发现 ...
- pandas.read_csv()参数(转载)
文章转载地址 pandas.read_csv参数整理 读取CSV(逗号分割)文件到DataFrame 也支持文件的部分导入和选择迭代 更多帮助参见:http://pandas.pydata.org/p ...
- pandas.read_csv()函数读取文件时,关于“header=None”影响读取列数区间的右闭合总结
对于一个没有字段名标题的数据,如data.csv 1.获取数据内容.pandas.read_csv("data.csv")默认情况下,会把数据内容的第一行默认为字段名标题. imp ...
- pandas.read_csv to_csv参数详解
pandas.read_csv参数整理 读取CSV(逗号分割)文件到DataFrame 也支持文件的部分导入和选择迭代 更多帮助参见:http://pandas.pydata.org/pandas ...
- pandas的用法
1.a = pandas.read_csv(filepath):读取.csv格式的文件到列表a中,文件在路径filepath中 pandas.core.frame.DataFrame是pandas的核 ...
- 被 Pandas read_csv 坑了
被 Pandas read_csv 坑了 -- 不怕前路坎坷,只怕从一开始就走错了方向 Pandas 是python的一个数据分析包,纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的 ...
- pandas.read_csv参数详解
读取CSV(逗号分割)文件到DataFrame 也支持文件的部分导入和选择迭代 更多帮助参见:http://pandas.pydata.org/pandas-docs/stable/io.html 参 ...
随机推荐
- AS导入项目报错:Plugin with id 'com.android.application' not found.
从github或第三方Demo中获取的项目导入到AndroidStudio中报错Plugin with id 'com.android.application' not found.:今天导入一个讯飞 ...
- SP1812 LCS2 - Longest Common Substring II
能匹配上子串的节点对它的所有parent都有贡献 在树上转移即可 #include<cstdio> #include<algorithm> #include<cstrin ...
- 模拟python中的Yield伪并发
并发,在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行. #Yield伪并发 _author_= ...
- angularjs探秘<五> 举足轻重的scope
scope在angular中的作用可谓举足轻重,不理解scope就不会angular: scope是应用在 HTML (view) 和 JavaScript (controller)之间的纽带. sc ...
- for循环执行时在,每执行一次for循环中弹出提示框,延时问题
在需求中,ajax的返回值,根据数组内容的长度去做循环,每循环一次弹出提示框,发现for循环的执行速度非常之快,想到了延时,但是在for循环中延时并不能解决这个问题. 查到setTimeout的递归处 ...
- 【Tomcat】Tomcat安装及Eclipse配置教程
==================================================================================================== ...
- js语法规则 ---console.log ---- prompt ----基本类型 ---parseInt
在页面中可以在body里面加入type=”text/javascript” 例如: <script type="text/javascript"> </scrip ...
- EasyuiDatagird绑定分页.NetMVC
引入EasyUi所有需要的脚本,样式 <link href="/easyui/themes/default/easyui.css" rel="stylesheet& ...
- 10.纯 CSS 创作一个同心圆弧旋转 loader 特效
原文地址:https://segmentfault.com/a/1190000014682999 想到了扇形:正方形 ->border-radius: 50%; ->取四份中的任意一份. ...
- 《算法》第六章部分程序 part 3
▶ 书中第六章部分程序,包括在加上自己补充的代码,后缀树的两种实现 ● 后缀树实现一 package package01; import java.util.Arrays; import edu.pr ...