Pandas常用操作

简介: Pandas常用操作

前言


Pandas的两种数据结构(pandas是基于Numpy来进行构建的,让以Numpy为中心的应用变得更加的简单)


一、Pandas简介


1-1、Series(类似一维数组的对象,由values和index组成,及由数据和索引构成):


1-1-1、使用


import pandas as pd
from pandas import Series,DataFrame
obj = Series(['a', 'b', 'c'], index=[1, 2, 3])
# 我们也可以把Series当作字典来使用,这时候,Series中的索引就是字典中的键。


1-1-2、切片

标签索引(即行和列的名称): loc[]

整型索引(几行几列,起始索引为0): iloc[]


import pandas as pd
df = pd.DataFrame({'a': [1, 2, 3], 'b': ['a', 'b', 'c'],'c': ["A","B","C"]})
print(df)
   a  b  c
0  1  a  A
1  2  b  B
2  3  c  C
# 选择多行
# 选择1到2行,选择所有列
print(df.loc[1:2,:])
   a  b  c
1  2  b  B
2  3  c  C

1-2、DataFrame(是一个表格型的数据结构,索引既有行索引也有列索引):

1-2-1、构建

import pandas as pd
from pandas import Series,DataFrame
# 左边是列索引。
data = {
  '60年代': {'狗子', '嘎子', '秀儿'},
  '70年代': {'卫国', '建国', '爱国'},
}
frame_data = DataFrame(data)
# T:转置操作。
frame_data.T


1-2-2、查询操作:


1、单个label值查询:df.loc[行名,列名]

2、使用值列表批量查询: df.loc[[多行名],列名]

3、使用数值区间范围查询:df.loc[起始行名:结尾行名,列名]

4、使用条件表达式查询:df.loc[行名判断筛选,列名]

备注:如果有多个条件的话,可以使用添加与或非连接他们。

5、调用函数查询:


1-2-3、pandas新增数据列:

1、直接赋值

# 1、直接赋值
# 增加一行,都赋值为4
df.loc[3,:]=4


2、apply(函数): 映射,赋予某种函数关系。
3、assign
4、分条件赋值

5、在df中插入新的series

# 假设有df和series
# 第一步要确保的是他们的length是相等的。
# 第二步,确保他们的索引是相等的,这里可以重置一下索引
df = df.reset_index(drop=True)
# 这里必须要加drop=True,表示删除原来的索引列,不然会在数据表格中新生成一列'index'数据
series = series.reset_index(drop=True)
# 插入series
# 第一个必须写0,即插入第一列,否则会报错,第二个参数是新列的名字,第三个参数是对应的series。
df.insert(0, 'series', series)


1-2-4、处理丢失数据:


1、判断是否非空 isnull() 例如:pd.isnull(要判断的数据)

2、notnull()

3、过滤函数 dropna()

4、填充函数 fillna()

其他注意:

1、None与NaN

pandas中None和np.nan都视为np.nan。

numpy中None不参与运算。

2、填充方式

均值填充

向前填充、向后填充(使用到了fillna里的参数method)

线性差值填充 (np.linspace(开始值,结束值,分为多少份))


1-2-5、删除行、列

# 删除第0行。
df.drop(0,axis=0,inplace=True)
# inplace默认为False,如果为True则表示替换原dataframe
# 删除第0列。
df.drop(0,axis=1,inplace=True)

1-2-6、更改列名

# 把列名s改为c
df.rename(columns={’s’:’c’}, inplace=True)
# inplace默认为False,如果为True则表示替换原dataframe


1-2-7、分组和合并、过滤:

1、分组:groupby()

2、过滤:filter()

3、汇总操作:aggregate()


1-2-8、表格匹配与拼接:

1、concatenate(concat()函数)

2、append

3、合并:merge()

4、join()


1-2-9、文件读取(read_csv、read_excell、read_sql):

read_csv():

# 默认分隔符为逗号
import pandas as pd
# skiprows:跳过哪一行数据
# header: 默认把第一行当作头部,如果指定header为None,则自动生成头部。
# nrows: 指定读取行数,只读取几行。(针对比较大的文件)
# sep: 指定分隔符是什么
# index_col: 直接读取会使文件中第一列数据默认为df的index,使列名和列数据发生错位。可以添加以下参数:int or sequence or False,default None
dd = pd.read_csv('dd.csv',  skiprows=[0], header=None, nrows=5)


read_excell():

# sheet_name: 指定工作表
# 其他参数:
# header: 表示用第几行作为表头,默认header=0,即默认第一行作为表头, header=None,表示不使用数据源中的表头。
# header为1,即选择第二行作为表头,其上的数据就不要了。
# names: 表示自定义表头名称,需要传递数组参数
# index_col: 指定列为索引列,默认为None。 index_col=0,指定第0列为索引列
excel = pd.read_excel('data_excel.xlsx', sheet_name='工作表')
# plot根据excel绘制图表,
# kind: 绘制模式
excel.plot(kind = 'scatter', x='age', y='place').get_figure()
# notice: 经过验证,通常情况下来说csv格式的文件要比excel格式类型的文件大的多。
# df: 读取的文件一般都保存为DataFrame格式的文件。
# parse_dates=True  尝试将格式解析成日期格式,解析不成功也不会出错,只按原格式输出


read_sql()

# 读取SQL语句,conn为数据库引擎,返回值是DataFrame。
conn = psycopg2.connect(host='*******', user='******', password='*******',
                            dbname='*******', port=*******)
sql = f'select * from ljl_temp."{table}"'
df = pd.read_sql(sql, conn)
conn.close()


1-2-11、索引重置reset_index():

注意:索引重置reset_index()可以获得新的index,原来的index变成数据列,保留下来。

不想保留原来的index,使用参数 drop=True,默认 False。

import pandas as pd
import numpy as np
df = pd.DataFrame(np.arange(20).reshape(5,4),index=[1,3,4,6,8])
print(df)
print(df.reset_index(drop=False))
# drop参数默认为False
# 如果需要直接使用重置后的索引,则需要直接把drop改为True,即把原来的index直接删掉。
# inplace = True: 直接替换掉原表。

1-2-13、确认数据出现的频率

# value_counts(): 可以对dataframe中的每个值进行计数并且排序
# ascending: 是否升序排列,bool类型参数
# normalize: 是否统计占比,bool类型参数
df['区域'].value_counts(normalize=True)
# 上海:0.7
# 深圳:0.1
# 广西:0.1
# 山西:0.1
df['区域'].value_counts()
# 上海:70
# 深圳:10
# 广西:10
# 山西:10
# 注意:df['区域']是series类型,如果是dataframe类型进行数据统计
df.apply(pd.value_counts)

1-2-14、日期生成date_range()


含义:用于生成一个固定频率的DatetimeIndex的时间索引

date_range(start=None, end=None, periods=None, freq=None, tz=None, normalize=False, name=None, closed=None, kwargs)


参数介绍


start:指定生成时间序列的开始时间

end:指定生成时间序列的结束时间

periods:指定生成时间序列的数量

freq:生成频率,默认‘D’,可以是’H’、‘D’、‘M’、‘5H’、‘10D’


close: 选择是否包含开始和结束时间,left包含开始时间,不包含结束时间,right与之相反。默认同时包含开始时间和结束时间。

# 指定起始时间
pd.date_range('20200101', '20200110')
# 或者是只是指定开始或者是结束时间,加一个参数periods。
# pd.date_range('20200101', periods=10)


输出


DatetimeIndex([‘2020-01-01’, ‘2020-01-02’, ‘2020-01-03’, ‘2020-01-04’,

‘2020-01-05’, ‘2020-01-06’, ‘2020-01-07’, ‘2020-01-08’,

‘2020-01-09’, ‘2020-01-10’],

dtype=‘datetime64[ns]’, freq=‘D’)


其他操作


其他参数: method: (ffill 前向值填充 bfill 后向填充)

2、排序: sort_values(), sort_index()

3、日期生成:data_range(‘20200101’, periods=6)

4、stack(): stack函数会把列索引转成行索引,即把列索引换成二级的行索引,即所有列压缩到一列。

# shift+tab查看函数源码
datas = pd.date_range('20211222', periods=7)
pd.DataFrame(np.random.randn(7,4), index=datas, columns=['a', 'c', 'b', 'f'])


总结


这个后续慢慢补充吧!


案例分析:基于RFM的客户价值分析模型.

最新Pandas.read_excel()全参数详解(案例实操,如何利用python导入excel).

相关文章
|
索引 Python
Pandas中DataFrame的属性、方法、常用操作以及使用示例(四)
Pandas中DataFrame的属性、方法、常用操作以及使用示例(四)
|
10月前
|
存储 数据挖掘 索引
【100天精通Python】Day55:Python 数据分析_Pandas数据选取和常用操作
【100天精通Python】Day55:Python 数据分析_Pandas数据选取和常用操作
78 0
|
数据采集 索引 Python
Pandas常用操作命令(二)
Pandas常用操作命令(二)
Pandas常用操作命令(二)
Pandas常用操作命令(四)
Pandas常用操作命令(四)
|
索引 Python
Pandas常用操作命令(三)
Pandas常用操作命令(三)
|
SQL 数据采集 JSON
Pandas常用操作命令(一)
Pandas常用操作命令(一)
|
索引 Python
Pandas中DataFrame的属性、方法、常用操作以及使用示例(七)
Pandas中DataFrame的属性、方法、常用操作以及使用示例(七)
|
索引 Python
Pandas中DataFrame的属性、方法、常用操作以及使用示例(六)
Pandas中DataFrame的属性、方法、常用操作以及使用示例(六)
Pandas中DataFrame的属性、方法、常用操作以及使用示例(五)
Pandas中DataFrame的属性、方法、常用操作以及使用示例(五)
|
索引 Python
Pandas中DataFrame的属性、方法、常用操作以及使用示例(三)
Pandas中DataFrame的属性、方法、常用操作以及使用示例(三)