欢迎使用CSDN-markdown编辑器
来源:互联网 发布:手机网页小游戏源码 编辑:程序博客网 时间:2024/05/17 09:24
Python pandas 的小知识
python3和R语言菜鸟。
作者:kingkong
联系QQ:224316803
这里我就不对pandas作什么详细介绍了,主要是日常工作中,遇到百万到千万级别数据处理的用法和小技巧。
先import pandas as pd
- 读取txt
df=pd.read_table('file_name.txt',names=None)df=pd.read_csv('file_name.txt',names=None)
-注意,这里names=None,是取原来的第一行为表头,若需要另外设置表头,可以用list形式赋值,不过个数要与列数相等,如names=[‘a’,’b’,’c’],输入names后,原来的第一行会成为第二行,新给的names会占据表头位置。
- 读取csv
df=pd.read_csv('file_name.txt',names=None)
与txt的方式类似
- 读取excel
读取excel要注意的东西比较多。
df=pd.read_excel('file_name.xlsx',sheetname=0,names=None,converters=None)
sheetname
参数是规定读入第n-1个sheet(要读入第1个sheet就填0,要读要读入第二个就填1),这里可以填数字,也可以填表名(表名用字符串处理,即names=’Sheet1’)
names
是用来规定读入的表头,这里与table读入有很大不同,如果names=None,即原来第一行会成为表头,若names=list,新给的list就会成为表头,而原来的第一行则会被覆盖(数据没了),而不是成为第二行。(下面有方法解决!)
converters
这个参数是用来调整excel读入时,常规类型和字符串类型的。当传值为None时,则默认方式读取。这时就可能会出现我们不想要的结果。如数据为00001,这样读进来之后,就会变成了1。所以我们需要给converters一个值,让它读入的时候就对数据做处理。converters需要一个字典类型的值{‘列名’:类型}
- 当excel没有表头数据
当我们要处理一个相当大的excel时,而它没有表头,即第一行数据就已经是数据本身,这时我们需要给它做一个表头,而names=None,第一行就会成为表头,而给names赋值,第一行就会被覆盖。
这时我们需要把excel切割再合并。
df=pd.read_excel('file_name.xlsx',sheetname=0,names=None,converters=None)
这时,第一行有效数据在表头。
col0=df.columnscol0=pd.DataFrame(col0).Tnames=[]rowsnum=len(df.iloc[1,:])for i in range(rowsnum): i='Head'+str(i+1) names.append(i) col0.columns=names df.columns=names df=pd.concat([col0,df],axis=0)
通过上面的代码,就把原来第一行的数据切到第二行,并赋予了新的表头。
当某些列需要用字符串处理
在excel中,有的数据类型为文本类型,而读入python的pandas时,却为数字类型
在cmd下运行python
这时,我们可以在read_excel时,用converters={‘A’:str,’B’:str}来指定数据类型。问题就解决了。当不知道有多少列会出现上面的情况时
如果一个excel中,数据维度太多,也不知道有多少列会出现这种情况时,我们可以用遍历一个字典的方式,来给converters赋值。这里针对的是有表头的excel数据,如果没有表头,可以用上面提及的方法结合此处提到的方法进行处理。(先以names=None原表头方式读入,此时表头为str类型处理读入的,通过没表头数据处理方法拿出第一行,再用下面提及的方式遍历表头成字典,赋值给converters)
colnames=df.columnsdictcolnames={}for i in colnames: dictcolnames[i]=strdf=pd.read_excel('file_name.xlsx',converters=dictcolnames)
通过上面的遍历再重读一次excel,获得的df,就是所有数据类型都是str的了。一般多个0等开头的数据都不是运作运算而是标记,如果其他字段需要是int类型时,可以在后面处理,因为读入数据主要痛点不是int,而是str。
- 一般列名修改
df=df.rename(columns={'原列名' : '新列名'})
注意要把改名后的df给自己赋值一次才能修改原来的df。
- 数据输出
- 文本、csv
txt与csv有很多相似的地方,就输出而言,都是用to_csv()
df.to_csv('file_name.txt'),columns=None,sep=',',index=False,header=header)df.to_csv('file_name.csv'),columns=None,sep=',',index=False,header=header)
文件后缀名直接影响输出文件类型。
columns
colunms=None时,即输出所有列,colunms可以接受列表,赋值后,输出时为指定的列。
sep
为分割符,默认为,
index
输出是否需要索引,默认为True
header
header默认为True,即输出表头,可以修改为False,则不输出表头。
header可以为list,在输出时,会重新修改一次表头。
- excel
to_excel('file_name.xlsx',sheet_name='Sheet1',columns=None,index=False,header=header)
excel输出没啥好说的。
- 一个不常见的索引头修改
df=df._set_axis_name('newindex')
欢迎喜欢研究python,R语言的朋友一起分享和讨论数据相关的问题。
分享归分享,引用和转载请注明出处,最终解释权归本文作者所有。
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 我的docker笔记
- 数组去重和splice() 方法split()跟join()数组方法pop() push() unshift() shift()
- The APR based Apache Tomcat Native library ...异常
- 2016年提高组模拟试题(20161105) 方程式
- VMWare打开Ubuntu没反应
- 欢迎使用CSDN-markdown编辑器
- 查看前五个最占用CPU的Oracle会话进程.以及他们正在执行的sql语句
- mysql 和greenplum的语法区别
- android 边框,下划线
- average pool对detection效果不好?
- 邮件正文及其附件的发送的C++实现
- My Bank
- oracle sql 序列
- ubuntu下JDK的自动安装和手动安装