python数据处理——pandas的基本使用

python数据处理——pandas的基本使用(一)

1.1 文本读取,pd.read_csv(),pd.read_table();

pandas 读取文本(txt、excel)中会常用到两个函数:read_csv() 和 read_table() ;两个函数出去读取文本不一样之外,读取文本时前者是以,(逗号)为分隔符读取,后者以 tab(空格)为 分隔符进行读取的,把读取到的文本转化成二维 Dataframe 数据格式,直观整洁以便后续处理,以 pd.read_table()为例:
pd.read_table()用到的参数有:
在这里插入图片描述
里面参数很多,但常用到的下面几个

  • filepath,欲读取的txt、csv文件、网页内容;
  • seq ,分割符来对字符串进行表格划分,一般来说 read_table()默认的为 tab(空格),read_csv()
    默认为,(逗号),可以根据具体情况自己设置;
  • usercols,可以设置提取自己需要的列名;

下面就是一个url网址内容,文本之间以 Tab键 作为分隔符:
在这里插入图片描述
利用 pandas 对里面的内容进行读取,展示如下:

url ='http://bit.ly/chiporders'

df1 =pd.read_table(url)
# 读取前5行数据
df1.head()

在这里插入图片描述

# usecols 参数作为选取特定的列;
df = pd.read_table(url,usecols = ['order_id','item_price'])
df.head()

在这里插入图片描述
不设置第一行为列名

#header默认为0,即以第一列为列名,这里设为None,意味不设置第一行为列名;
df11 = pd.read_table(url,header =None)
df11.head()

1.2 读取时用names修改列名

#names =***,可以自定义设置列名
user_cols = ['id','quantity','name','choice','price']
df= pd.read_table(url,header =None,names = user_cols)
df.head()

在这里插入图片描述
1.3 用describe()函数对描述大致数据

#对整个Dataframe各列做个基本统计;
# count:数
# unique: 总体分为3类;
# top:频率最高的value;
# freq:出现频率最高的次数;
df.describe()

在这里插入图片描述
1.4 shape函数返回二维数据的列数、行数

df.shape#查看Dataframe的整体数据

在这里插入图片描述
1.5 读取到的 Dataframe 每一列数据类型为Serie

#列出某一列的数据,为一个series数据
df['name']#也可以df.name
print(type(df['name']))

在这里插入图片描述
1.6 处理数据中时利用columns改变列名

#在Dataframe数据中更改列名,在每个列名后面加一个‘_’;
df.columns = [str(i)+'_' for i in df.columns]
df

在这里插入图片描述
1.7 利用drop函数删除特定的列

#pd.DataFrame去除某一列,用到的函数drop,
# 第一个参数为单个标签或多个标签;
# axis表示欲删除的为行或者列,0为行,1为列;
# inplace =True,以及操作
df1 =df
df1.drop(['name_','choice_'],axis = 1,inplace = True)
df1.head()

在这里插入图片描述
1.8 利用map函数对列中数据格式进行变换

#对某一列数据进行修改;把price_中的$变成¥;利用lambda映射;
df['price_'] = df['price_'].map(lambda x:str(x).replace('$','¥'))
df

在这里插入图片描述

1.9 to_csv将 Dataframe数据直接写到csv文件中

#将 Dataframe写出csv文件,
# 第一个参数描述欲输出的文件名,若提供的为None,则返回的是string;
# index表示行索引,默认为True,
#   header = True表示的是不保存列名。
# encoding = 'gbk',输入编码方式为gbk
df.to_csv('E:/ceshi/ab.csv',index =False,header =True,encoding = 'gbk')

在这里插入图片描述
注:上面的代码运行都是在jupyter notebook编辑器上进行

Pandas 基本使用(二) — DataFrame.to_dict() 函数使用

Pandas 处理数据的基本类型为 DataFrame,数据清洗时不可必然会关系到数据类型转化问题,Pandas 在这方面也做的也非常不错,其中经常用的是 DataFrame.to_dict() 函数之间转化为字典类型;除了转化为字典之外,Pandas 还提供向 json、html、latex、csv等格式的转换:
在这里插入图片描述
to_dict() 函数基本语法

DataFrame.to_dict (self, orient='dict',* into=)*                 --- 官方文档

函数中只需要填写一个参数:orient 即可 ,但对于写入orient的不同,字典的构造方式也不同,官网一共给出了6种,并且其中一种是列表类型:

  • orient =‘dict’,是函数默认的,转化后的字典形式:{column(列名) : {index(行名) : value(值)
    )}};
  • orient =‘list’ ,转化后的字典形式:{column(列名) :{ values }};
  • orient =‘series’ ,转化后的字典形式:{column(列名) : Series (values) (值)};
  • orient =‘split’ ,转化后的字典形式:{‘index’ : [index],‘columns’
    :[columns],’data‘ : [values]};
  • orient =‘records’ ,转化后是 list形式:[{column(列名) :
    value(值)}……{column:value}];
  • orient =‘index’ ,转化后的字典形式:{index(值) : {column(列名) : value(值)}};

备注:

1,上面中 value 代表数据表中的值,column表示列名,index 表示行名,如下图所示:
在这里插入图片描述
2,{ }表示字典数据类型,字典中的数据是以 {key : value} 的形式显示,是键名和键值一一对应形成的。

2,关于6种构造方式进行代码实例

六种构造方式所处理 DataFrame 数据是统一的,如下:

>>> import pandas as pd
>>> df =pd.DataFrame({'col_1':[1,2],'col_2':[0.5,0.75]},index =['row1','row2'])
>>> df
      col_1  col_2
row1      1   0.50
row2      2   0.75

2.1,orient =‘dict’ — {column(列名) : {index(行名) : value(值) )}}

to_dict(‘list’) 时,构造好的字典形式:{第一列的列名:{第一行的行名:value值,第二行行名,value值},….};

>>> df
      col_1  col_2
row1      1   0.50
row2      2   0.75
>>> df.to_dict('dict')
{'col_1': {'row1': 1, 'row2': 2}, 'col_2': {'row1': 0.5, 'row2': 0.75}}

orient = 'dict 可以很方面得到 在某一列对应的行名与各值之间的字典数据类型,例如在源数据上面我想得到在col_1这一列行名与各值之间的字典,直接在生成字典查询列名为col_1:

>>> df
      col_1  col_2
row1      1   0.50
row2      2   0.75
>>> df.to_dict('dict')['col_1']
{'row1': 1, 'row2': 2}

2.2,orient =‘list’ — {column(列名) :{ values }};

生成字典中 key为各列名,value为各列对应值的列表

>>> df
      col_1  col_2
row1      1   0.50
row2      2   0.75
>>> df.to_dict('list')
{'col_1': [1, 2], 'col_2': [0.5, 0.75]}

orient = ‘list’ 时,可以很方面得到 在某一列 各值所生成的列表集合,例如我想得到col_2 对应值的列表:

>>> df
      col_1  col_2
row1      1   0.50
row2      2   0.75
>>> df.to_dict('list')['col_2']
[0.5, 0.75]

2.3,orient =‘series’ — {column(列名) : Series (values) (值)};

orient =‘series’ 与 orient = ‘list’ 唯一区别就是,这里的 value 是 Series数据类型,而前者为列表类型

>>> df
      col_1  col_2
row1      1   0.50
row2      2   0.75
>>> df.to_dict('series')
{'col_1': row1    1
row2    2
Name: col_1, dtype: int64, 'col_2': row1    0.50
row2    0.75
Name: col_2, dtype: float64}

2.4,orient =‘split’ — {‘index’ : [index],‘columns’ :[columns],’data‘ : [values]};

orient =‘split’ 得到三个键值对,列名、行名、值各一个,value统一都是列表形式;

>>> df
      col_1  col_2
row1      1   0.50
row2      2   0.75
>>> df.to_dict('split')
{'index': ['row1', 'row2'], 'columns': ['col_1', 'col_2'], 'data': [[1, 0.5], [2, 0.75]]}

orient = ‘split’ 可以很方面得到 DataFrame数据表 中全部 列名或者行名 的列表形式,例如我想得到全部列名:

>>> df
      col_1  col_2
row1      1   0.50
row2      2   0.75
>>> df.to_dict('split')['columns']
['col_1', 'col_2']

2.5,orient =‘records’ — [{column:value(值)},{column:value}….{column:value}];

注意的是,orient =‘records’ 返回的数据类型不是 dict ; 而是list 列表形式,由全部列名与每一行的值形成一一对应的映射关系:

>>> df
      col_1  col_2
row1      1   0.50
row2      2   0.75
>>> df.to_dict('records')
[{'col_1': 1, 'col_2': 0.5}, {'col_1': 2, 'col_2': 0.75}]

这个构造方式的好处就是,很方便得到 列名与某一行值形成 字典数据;例如我想要第2行{column:value}数据:

>>> df
      col_1  col_2
row1      1   0.50
row2      2   0.75
>>> df.to_dict('records')[1]
{'col_1': 2, 'col_2': 0.75}

2.6,orient =‘index’ — {index:{culumn:value}};

orient ='index’与2.1用法刚好相反,求某一行中列名与值之间一一对应关系(查询效果与2.5相似):

>>> df
      col_1  col_2
row1      1   0.50
row2      2   0.75
>>> df.to_dict('index')
{'row1': {'col_1': 1, 'col_2': 0.5}, 'row2': {'col_1': 2, 'col_2': 0.75}}

#查询行名为 row2 列名与值一一对应字典数据类型
>>> df.to_dict('index')['row2']
{'col_1': 2, 'col_2': 0.75}

3,to_dict() 函数其它用法

在部分 2 只展示了这个函数的一部分功能,还有其他用法,例如可以快速索引第几行第几列的值(pandas内置索引函数),例如我想要第二行第二列的值,可以这样操作:

#to_dict 版本的:
>>> df
      col_1  col_2
row1      1   0.50
row2      2   0.75
>>> dict_1 = df.to_dict('index')
>>> dict_2 = dict_1[list(dict_1.keys()[1])]
>>> dict_2[list(dict_2.keys())[1]]
0.75


# pandas自带的
>>> df
      col_1  col_2
row1      1   0.50
row2      2   0.75
>>> df.iloc[1,1]
0.75

参考链接 :
python数据处理——pandas的基本使用(一) :https://mp.weixin.qq.com/s/-jwjzt5lXHecAGTqcnEUlw

python数据处理——pandas的基本使用(二) :https://mp.weixin.qq.com/s/2OZBZJZNYXZe-xGY0Bz5Ug

  • 12
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值