栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

一篇文章带你了解pandas

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

一篇文章带你了解pandas

pandas Series
s = pandas.Series({‘key1’:value1,'key2':value2}) 生成类似字典的键值列表
s = pandas.Series([value1,value2],index=['a','b']) 生成列表,index不只是添加字段,还有选择列的作用
排序
series.sort_values(ascending=True, inplace=True)  # 根据值排序, ascending是否升序
series.sort_index()  # 更具索引排序
pd.set_option('display.max_columns', None)  # 显示最大列数
pd.set_option('display.max_rows', None)   # 显示最大行数
创建pandas.Dataframe
df = pandas.Dataframe(数据, index=[行名1, 行名2, 行名3], columns=[列名1, 列名2, 列名3, 列名4]) 由多个Series(列)组成
# 如果数据包含列名, 数据可以是Series ndarray 字典, index可以是数据的某列, columns就可以只填部分列名,以只选择部分列(并按照顺序显示,填不存在的列名就会生成空列),
# 数据不包含列, 默认列和index都是0-n,, 默认值都是数字格式
df = pandas.Dataframe(numpy.array([]))生成一列
df = pandas.Dataframe([numpy.array([]), numpy.array([])]) 根据两个array生成两行的表格,array也可以用pandas.Series()代替
df = pandas.Dataframe(numpy.arange(15).reshape(3,5))  生成3*5(0-14)的表格
df = pandas.Dataframe({'a':pandas.Series(), 'b':pandas.Series()})  以a和b为列名pandas为列值生成表格
df = pandas.Dataframe(dict)  根据字典生成表格
获取/修改行或列 获取列
df.columns 产看所有列名
df[x]  # 获取x列, x为列名(未定义列名,就是数字列名)
df[[x1,x2]]  获取x1,x2列(未定义列名,就是数字列名)
df[x].str.split() # 如果这列是字符串类型,可以直接当作字符串操作
df[x].astype(str).str.split('/')  # 把一列强制当作一种类型操作,返回一列
df[x].astype(str).str[0:3]  # 获取一列的切片
获取行
df.values  返回数据的二维数组
df.head(n) 返回前n行的数据,不填为前五行
df.tail(n) 返回后n行的数据,不填为后五行
df[0:3] 返回0到2行
df.iloc[2] 返回索引为2行的数据
df.loc['name']  # 获取name列
df.loc['5']['name']  获取5行的name
修改列
df['name'] = 'Jack'  # 把name列都设置为Jack
df['name'] = pd.Series(['Mike','John','Sarah'],index=[1,4,6])  # 筛选赋值
df['name'] = df2['name']  # 把另一个表的列赋值给本表
df['id'][['age']>18] = 1111  # 筛选修改,原表也会被修改, df['id']不能赋值给变量
df['age'].apply(lambda x: x>5)  # 可以为匿名函数也可以是函数名

添加列
df['列名'] = ['数据'] 在最后添加一列
df.insert(1,'列名', 数据) 在第1列前添加一列
删除列
df.drop(['列名','列名'],axis=1,inplace=True)  # axis=1删除列,0删除行   inplace=True原位操作    [[[],[]],[]]]
del df['列名']
df.pop('列名')
添加行
df.append([{'列名':值,'列名':值}],ignore_index=True)  # 并非原位操作,而是返回新的dataframe
df.append(df_other,ignore_index=True) 列表合并
删除行
df.drop(['行名','行名'],axis=0,inplace=True)  # axis=1删除列,0删除行  inplace=True原位操作
df.drop([n,m],inplace=True) 删除n行和m行
df.drop(df['id']==5,inplace=True)
df = df[(df.A!=5)&(df.B<3)] 删除A列为5且B列>=3的列
df = df[(df.index>5)] 删除索引值<=5的行
数据采样(随机抽样)
df.sample(n=5,replace=True)
描述统计
df.describe().round(2).T 对所有的类型为数字的列进行数据统计count(计数) mean(均值) std(标准差) min(最小) 25% 50% 75% max(最大)
df['price'].std()  计算价格列标准差 

df['num1'].cov(df[num2])  计算两列的协方差

df.cov() 计算整个表的协方差

count(计数) mean(均值) std(标准差) min(最小) 25% 50% 75% max(最大) cov(协方差)

相关分析
df['column1'].corr(df['column2']) 计算两列的相关系数
df.corr() 整个表数字列的相关系数
修改数据
new_df = pd.dataframe({'b': ['d', 'e']}, index=[1, 2])  更新b列的第1,2个元素

df.rename(column={'old_name':'new_name'}, replace=true) 修改列名

df['列名或不填及不做限制'].replace({'old':'new'},replace=true)  # 替换

df.set_index('列名') 去掉原来的默认索引  把该列设为索引放在列表左侧

df.reset_index()  重置索引为默认索引  [0,1,2,3,......]

pandas.set_option('display.max_columns', none)

inplace=True 直接修改列表,False生成副本

数据表清洗
df.dropna(how=any)  删除所有含有空值的行
df.fillna(value=a) 用a填充所有空值

df.isnull()

df['a'].astype('int') 把a列数据格式改为int

数据按列分组(筛选)
group = df.groupby('列名') 按照列名分组返回 列名 分组信息的字典
group = df.groupby(['column1','column2'])  # 返回一个分组对象,并不是分组的结果

group.agg({'column3':'medium','column4':'mean'})  # 可以用任意列,同时对多列执行操作

# count(计数) mean(均值) std(标准差) min(最小) max(最大) std(标准差) var(方差) sum(求和) median(中位数)

group = df.groupby('列名').apply(lambda x:x>5)  # 对分组结果筛选

group = df.groupby('列名').apply(lambda x:x)  # 直接获取分组结果

df['sort_message'] = numpy.where(df['limit_message']>5, cont_of_true. cont_of_false)  #数据按条件分组赋

数据筛选
df.loc[df['name'] == 'mike']  获得name列等于mike的行,返回特定行的数据 可以是索引也可以是筛选条件

df.loc[(df['age'] >18) & (df['age'] <25)]  # 联合筛选

df[df[n]>2] 获取第n列数据大于2的所有行 (首先必须定义列名,且不能为数字)

df['年龄'].isin([‘20’,‘21’])  # 判断年龄的值是否为20或21 输出索引和判断结果

df[(df['age']=='10' & df['age'] >= 15)]  # 多比较条件筛选,获取 age>=15 和age=10的列, 对于float类型的数据,需要先把比较列round小数位取整, 不然会出现相同小数比较不同的情况

df['name'].str.contains('张|刘')  # 模糊搜索

数据合并
df.update(new, join="left", overwrite=True, filter_func=None, raise_conflict=False) 
new 更新的数据, overwrite=True 覆盖原始值 False更新空值, filter_func 过滤函数输入原列表 返回布尔数组, raise_conflict=True 都非空时报错

至少一列字段相同, 不会扩大原表

df_new = pandas.concat([df1,df2,df3],axis=1,join="outer", join_axes=None,keys=None, ignore_index=true)

axis 合并维度 0行 1列, join 合并方式 inner交集 outer 并集, join_axes 定义拼接列, keys 

df_new = pandas.merge(left,right,on='name',how='inner', left_on=None)  # 数据合并    on 相对于那列合并   how合并方式

how =innner(默认, 保留on相同的行), 'left'(保留左边df的 on列出现的所有值) 'right' (保留右边dfon列出现的所有值) 'outer'(保留on列出现的所有值)

how决定了, 合并结果的on列的内容

left_on 左边用于连接的列, right_on,右边用于连接的列,  列名不同,含义相同时好用

left_index 左边用于连接的行, right_index 右边用于连接的行

sort 结果是否排序

df.append(df,ignore_index=True)  # 再列表末尾添加

数据拆分
把列按照字符纵向分割为多列
df['name'].unique()  # 获取唯一值组成的列表

for i in df['name'].unique():  # 按name类拆分

df[df['name']==i].to_csv(i+'.csv',encoding='gb180310)

把列按照字符横向分割为多列

df['name'].str.split(",",expand=True)  # 把列按照逗号分隔为多列    ['name'] ->  "jack,student"   -> jack  student

数据排序
pd.sort_values(by=[],axis=0,ascending=true,inplace=true)  对值进行排序

by=[] 排序的列  axis=0对行操作1对列操作  ascending=true 升序false降序  inplace=true 修改原表false生成拷贝

pd.sort_indexs(axis=0,ascending=true,inplace=false)

set.isdisjoint(s):判断两个集合是不是不相交

set.issuperset(s):判断集合是不是包含其他集合,等同于a>=b

set.issubset(s):判断集合是不是被其他集合包含,等同于a<=b

累积和
pd['time'].cumsum()  # 按照轴向一次累加
query(查询)
 
时间 
数据导入和导出 
df=pandas.read_excel('name',low_memory=False)  # low_memorys是否部分读取
df=pandas.read_csv('name',header=1)

如果读取中文csv文件出现部分编码错误,可以先用open打开文件,errors=‘ignore’

file = open('file.csv','r',errors='ignore',encoding='gb18030')

data = pd.read_csv(file,header=0,encoding='gb18030',low_memory=false)

df.to_excel('file_name.xlsx',sheet_name='',enconding='gb18030')

df.to_csv('file_name.csv')

读取mysql
my_db = pymysql.connect(host='47.104.78.62', user='root', port=3306, password='111111', db='job', charset='utf8')

连接必须有数据库参数

d = pandas.read_sql('select * from message where position like "广州"', my_db)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/757933.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号