Pandas常用操作

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

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

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

标签索引(即行和列的名称): 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(是一个表格型的数据结构,索引既有行索引也有列索引):

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

1、单个label值查询:df.loc[行名,列名]
2、使用值列表批量查询: df.loc[[多行名],列名]
3、使用数值区间范围查询:df.loc[起始行名:结尾行名,列名]
4、使用条件表达式查询:df.loc[行名判断筛选,列名]
备注:如果有多个条件的话,可以使用添加与或非连接他们。
5、调用函数查询:

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、判断是否非空 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(开始值,结束值,分为多少份))

删除第0行。
df.drop(0,axis=0,inplace=True)
inplace默认为False,如果为True则表示替换原dataframe
删除第0列。
df.drop(0,axis=1,inplace=True)
把列名s改为c
df.rename(columns={'s':'c'}, inplace=True)
inplace默认为False,如果为True则表示替换原dataframe

1、分组:groupby()
2、过滤:filter()
3、汇总操作:aggregate()

1、concatenate(concat()函数)
2、append
3、合并:merge()
4、join()

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()

注意:索引重置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: 直接替换掉原表。
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)

含义:用于生成一个固定频率的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'])

这个后续慢慢补充吧!

Original: https://blog.csdn.net/weixin_42475060/article/details/122543744
Author: ㄣ知冷煖★
Title: Pandas常用操作

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/751316/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球