分享

pandas的菜鸟级应用(谁都能学会)

 网海拾贝网络猪 2020-01-03

简述:
这是本人第一篇博文,因为自己想向最近很火的人工智能,大数据,进行靠拢。所以就从基本做起,掌握基本的python 的库,像 pandas ,numpy 。水平有限大家见谅。
pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。(来自百度百科)
一.生成数据
最基础的把不管你进行大数据还是啥的首先你得先读数据吧。
1.导入库`

import numpy as np
import pandas as pd

2.读入csv 或 xlsx 文件。

df = pd.DataFrame(pd.read_csv('name.csv',header=1))
df = pd.DataFrame(pd.read_excel('name.xlsx'))

1)关于 read_csv 这个文件有很多参数:
咱罗列一下
这是官网的数据

read_csv(filepath_or_buffer, sep=',', delimiter=None, header='infer', names=None, index_col=None, usecols=None, squeeze=False, prefix=None, mangle_dupe_cols=True, dtype=None, engine=None, converters=None, true_values=None, false_values=None, skipinitialspace=False, skiprows=None, nrows=None, na_values=None, keep_default_na=True, na_filter=True, verbose=False, skip_blank_lines=True, parse_dates=False, infer_datetime_format=False, keep_date_col=False, date_parser=None, dayfirst=False, iterator=False, chunksize=None, compression='infer', thousands=None, decimal=b'.', lineterminator=None, quotechar='"', quoting=0, escapechar=None, comment=None, encoding=None, dialect=None, tupleize_cols=None, error_bad_lines=True, warn_bad_lines=True, skipfooter=0, doublequote=True, delim_whitespace=False, low_memory=True, memory_map=False, float_precision=None)

官网原文链接:(http://pandas./pandas-docs/stable/io.html)
有点吓人,但是别慌,我感觉常用的有几个,总结一下。常用的有,`

(1).filepath_or_buffer 文件的地址和名字`

df = pd.read_csv('mcup(6).CSV', sep=',',engine='python')

(2)sep 间隔。如果不使用参数,默认用逗号分隔。有一个好用的间隔符
‘\s+’
正则表达式中\s匹配任何空白字符,包括空格、制表符、换页符等等。
但是要分情况 。不一定‘\s+’ 好用。
(3)delimiter sep 会失效 pd.read_csv(path,sep='\s+',delimiter='\n')sep 不会有作用

(4)delim_whitespace
delim_whitespace=True,分隔符我们就简化成了和sep=’\s+'一样能处理各种常见分割符
(5) header 默认为0 可为数字也可为list(列表) 没有列名时要设成None
为列表时,就像[1,3]时是将第1行和第3行作为标题,第2行就会跳过,并从第4行开始读取数据
当为0 时就是直接第一行为列名,第二行开始为数据,其他同理。 没有列名时要设成None
第一行开始读为数据。
我感觉差不多就这些,再用到别的看官网。
2) 关于read_excel()这个

pd.read_excel(io, sheet_name=0, header=0, names=None, index_col=None, 
              usecols=None, squeeze=False,dtype=None, engine=None, 
              converters=None, true_values=None, false_values=None, 
              skiprows=None, nrows=None, na_values=None, parse_dates=False, 
              date_parser=None, thousands=None, comment=None, skipfooter=0, 
              convert_float=True, **kwds)

在罗列几个常用的:
(1)io Excel的存储路径


io = r'C:\Users\Administrator\Desktop\data.xlsx'  #这里的r是转意。

data = pd.read_excel("io")

(2)sheet_name

工作表的名称(中英文都行)。


data = pd.read_excel(io, sheet_name = 1)  #

还可以 sheet_name = “SheetN” S 要大写 。代表第N个sheet
(3) header 和上面的类似:、
(4) names 重新进行命名 ,像数据库里的 As

df = pd.read_excel(io,sheet_name="2017" ,names =  ['year','day','month'])

假设之前的列名就会别改成 year day month 注意: names 里的个数一定要和列名个数一样。
(5) index_col 用作索引的列

df = pd.read_excel(io,sheet_name="2017" ,index_col ="年")

以年作为用作索引的列``
(6) usecols 需要读那些列 可以为整型

df = pd.DataFrame(pd.read_excel("Appendix 1.xls",sheet_name="2018", usecols = [1, 2, 3]))

意思就是读1,2,3,行
(7)
nrows 读取多少行。
差不多就这样:

二.对读取的信息进行查看
1.看形状 df.shape
2.基本信息df,info()
3.看格式df.dtype
4.看空值df.isnull()
5.看列名df.columns
6.看前十行df.head
7.看后十行df.tail
三.数据合并
1.用merge合并(注意:需指定链接键)

pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,
         left_index=False, right_index=False, sort=True,
         suffixes=('_x', '_y'), copy=True, indicator=False,
         validate=None)

left 左面的DataFrame 对象
right 右面的DataFrame 对象
on 用来确定数据集合的主键

pd.merge(df1,df2,on = 'country')

left_on right_on用来指列名使不同的列明合并(注意 列名属性必须相同)

df = pd.merge(df1,df2,left_on="country",right_on ="city")

how 是链接方式,默认为inner
how:inner:取交集,outer:并集;left:参照左边表格行,right:参照右边表格行
2.concat 合并

pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False,
keys=None, levels=None, names=None, verify_integrity=False, sort=None, copy=True)

axis =0 为默认值,上下合并 axis =1 左右合并
join 同上
sort 网上说在大数据时不要用。

df = pd.concat([df1, df2, df3], axis=0, ignore_index=True)#

合并后重新索引。

3.join 合并 (默认为外连接 outer)


df= pd.concat([df1, df2], axis=0, join='outer') 

默认之下先是进行列合并 ,有相同的列再行合并

四.数据清洗
1.处理缺失值
首先 isnull() 和 notnull 使用

df.isnull()
df.isnutnull()

对于缺失的值来说,我用的都是用0 或用平均值代替 或者直接删除
1)用0代替df.fillna(0)
2) 用平均值代替

df ['prince']= df.fillna(df['price'].mean())

3)删除df.dropna()

两个返回的都是bool 型变量
2.重复值
df.duolicated() 这是找重复值的函数
df.drop_duplicates() 这是去掉重复值。
3.数据之间有空格(这个因为我是小白还没见过太多数据)
查看 df['名字'].value_counts()
3.去空格:
1)去两边的空格

df['name']=df['name'].map(str.strip)

2)去左边的空格

    df['name']=df['name'].map(str.lstrip)

3)去右边的空格

df['name']=df['name'].map(str.rstrip)

还有就是大小写的转换:

1) 全部变成大写

df['name']=df['name'].map(str.upper)

2)全部变成小写

df['name']=df['name'].map(str.lower)

3)首字母大写

df['name']=df['name'].map(str.tittle)

4.检验类型
1)检验字符

df['name'].apply(lambda x: x.isalpha())

2)检验字母

df['name'].apply(lambda x: x.isalpha())

3)检验数字

df['name'].apply(lambda x: x.isalnum())

5.改数据类型

df['name']=df['name'].astype(np.int64)

6.数据替换

df['city'].replace('sh', 'shanghai')

五.数据分组
1.groupby 这学期在学数据库,感觉很像数据库老师说的pandas 和sql 很像,这个就是按什么分类。

对一个字段

df.groupby('country‘) .count()

对两个字段

df.groupby(['name','country'])['id'].count()

六.数据筛选

这是最关键的至少我感觉(大佬勿喷)
1.直接

df['sum'] = df.apply(lambda x: x.sum(), axis=1) # 行求和,axis=1表示横向
df.loc['sum'] = df.apply(lambda x: x.sum()) # loc获取一整列的数据,对一列数据进行求和

2.loc 行索引 以及筛选

print(df1.loc["1"])
aa=df1.loc[( df1['age'] > 1) & (df1['age'] < 10) ]
aa=df1.loc[( df1['age'] > 1) ].sort_values(['age'])

注意一定要是行标签

2 iloc获取列索引

df1.iloc[0:len(df), 0:3]

0 到3 列 所有行

df_inner.iloc[:3,:2] #冒号前后的数字不再是索引的标签名称,而是数据所在的位置,从0开始,前三行,前两列。

3.重新设置索引

df.reset_index()

4.isin 的简单应用

df['city'].isin(['beijing'])

也可取反
5.
contains的简单应用

  df = df[~df["名字"].str.contains("王")]   #找到名字中没有王的那个人
  new_df_object = old_df_object[old_df_object.name.str.contains(r'.*?中国.*')]  #  参考的

也可正则化,下一次打算系统总结一下正则化

七.常用操作
删除一行,axis 指轴
df1.drop(‘列名’, axis=1)
标准差:

df['price'].std()

协方差

df['price'].cov(df['m-point'])

两个字段的相关性分析

df['price'].corr(df_i['m-point'])

写入文件

df.to_csv('example.csv') 
df.to_excel('python.xlsx', sheet_name='love')

大体操作,当然我也只是一个’小学生’,刚刚入门,所以会有理解的偏差,希望大家多多指教。我们共同进步。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约