欢迎使用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时,却为数字类型
    excel截图
    在cmd下运行python
    cmd
    这时,我们可以在read_excel时,用converters={‘A’:str,’B’:str}来指定数据类型。问题就解决了。
    cmd2

  • 当不知道有多少列会出现上面的情况时
    如果一个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输出没啥好说的。

- 一个不常见的索引头修改

suoyin
suoyin2

df=df._set_axis_name('newindex')

index
newindex

欢迎喜欢研究python,R语言的朋友一起分享和讨论数据相关的问题。

分享归分享,引用和转载请注明出处,最终解释权归本文作者所有。

0 0