pandas使用
Posted 小蜗牛爱远行
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pandas使用相关的知识,希望对你有一定的参考价值。
pandas使用
pandas的基本数据结构
Series
Series是含有索引名称的列表
import pandas as pd
pd_se = pd.Series([1,2,3],index=['a','b','c']) #对list的每一个元素给出了a,b,c作为名字
#可以按照名称进行选取
pd_se['a':'c']
#生成时间序列
dates = pd.date_range('20190401',periods=10)
#生成以时间序列为名称的Series
pd_count = pd.Series(range(10),index=dates)
#按照时间间隔进行选取
pd_count['2019-04-04':'2019-04-08']
DataFrame
- DataFrame是含有列名和索引名的二维数组
数学 语文 化学 地理 音乐 体育 性别 <------列名
0 90 80 100 60 80 60 男
1 95 76 60 90 65 20 女
2 70 69 70 65 90 90 男
3 92 73 89 82 60 57 男
4 72 30 60 90 50 20 女
5 70 90 100 86 100 30 女
|
|
索引名
- DataFrame的基本选取操作
import pandas as pd
df_score = pd.read_excel('score.xlsx')
df_score = pd.DataFrame(pd.read_excel(''score.xlsx',converters = u'lqzydm':str,u'lqyxsm':str))#使用converters进行转换
#基本的数据探索
df_score.info() #基本的数据结构,行列多少及数据类型
df_score.head(3) #查看前三行数据
df_score.tail(3) #查看后三行数据
df_score.decribe() #整个数据集基本的统计情况50%是中位数,25%是下四分位点,75%上四分位点
df.to_excel()
# df = pd.DataFrame('name': ['Parker', 'Smith', 'William', 'Terry'], 'Maths': [78, 84, 67, 72], 'Science': [89, 92, 61, 77], 'English': [72, 75, 64, 82])
#二维数组的每个元素的长度必须相同
#基本的数据选取
df.loc() #选取列数据
df.iloc() #选取行数据
- 进阶操作
df_imdb = pd.read_csv('IMDB.csv')
#查看数据基本信息
df_imdb.info()
#选出一列
df_imdb.Title #相当于df_imdb['Title']
#获取最高票房
df_imdb['Revenue (Millions)'].mean()
df_imdb['Revenue (Millions)'].max()
df_imdb['Revenue (Millions)'].sum()
df_imdb['Revenue (Millions)'].median()
df_imdb['Revenue (Millions)'].idxmax()#返回最大值的索引
#将DataFrame第50行数据的Director列取出,[]去1:6的数据的时候不会把6取出来
df_imdb[50:51]['Director']
#第一个纬度是行,第二维度是列,将50到56行(包含50行和56行自身)的导演和年份取出
df_imdb.loc[50:56,['Director','Year']]
#将1到10行(不包含第10行),及2到3列(不包含第3列)取出,使用整数索引操作
df_imdb.iloc[1:10,2:3]
#统计Director列中不同导演出现的次数,新建对象的话类型是`Series`,可通过`对象.items()`进行for循环遍历获得每行元素
df_imdb['Director'].value_counts()
#将票房大于5亿美元的电影选出来,支持> < ==
df_imdb[df_imdb['Revenue (Millions)'] > 500]
#将电影风格描述中含有Sci-Fi(科幻)关键字的找出,str将待处理列转换为字符串
df_imdb[df_imdb['Genre'].str.contains('Sci-Fi')]
#将缺失数据(NaN)填充为0,也可以自己根据项目需求指定其他数据
df_imdb.fillna(0)
#将缺失数据的行移除(默认操作,可以使用axis=1指定删除列df_score.dropna(axis=1),0:按行,1:按列)
df_imdb.dropna()
#加载excel文件
df_score = pd.read_excel('score.xlsx')
#在DataFrame增加一列avg(平均值),计算当前DataFrame中每一行的平均值作为avg的数据,前后赋值数据的
#行数要对应,axis=1表示按照行计算平均值,axis=0(默认值),表示按列计算
df_score['avg'] = df_score.mean(axis=1)
#为成绩表添加一个新列,计算总分
df_score['sum'] = df_score.sum(axis=1)
#选出音乐、性别字段,按照性别分组,进一步计算各个分组的总和
df_score.loc[:,[u'音乐',u'性别']].groupby(u'性别').sum()
#将数学成绩大于80或化学成绩大于60的同学选出
df_score[(df_score[u'数学'] > 80) | (df_score[u'化学'] > 60)]
#使用lambda,配合apply方法将日期中的年份提取出来
#apply函数会将lambda一次作用到数据集的每个元素
dates = pd.Series(['20190901','20190902','20190903'])
dates.apply(lambda x:x[0:4])
#创建一个数据的副本
df_copy = df_score.copy()
#计算数学列的总和、平均值、最大值、方差,里面的字符串必须有同名函数
df_score[u'数学'].agg(['sum','mean','max','std'])
#将pandas类型转换为numpy类型
df_score.loc[:,[u'数学',u'化学']].values
#对新添加的sum(总分)按照降序进行排序,False:降序(由大到小),默认是升序(由小到大)
df_score['sum'].sort_values(ascending=False)
#提取不重复数据(subset:要匹配重复项的列标签,可以是单独一个列,也可以是几个列,用序列表示。默认是选择所有列.keep:删除重复项留下哪一行,keep=first:留下重复项中的第一行。keep=last:留下最后一行。keep=False:删除所有重复项)
df_score.drop_dumplicates(subset='字段名字', keep=first)
#读取df数据
for index, row in df.iterrows():
read_ks.loc[index, u'数据时间'] = data_time
#获取某一列某个值所在的行数(Int64Index([12], dtype='int64')转换为int)
sum_index = df[df['考核指标'].isin(['结算达成'])].index.tolist()[0]
'aaa' if project is np.nan else 'bbbbb'
skiprows=range(2,3) #跳过指定行
skiprows=[0,1,2,3,5] #跳过指定行
- 打开数据库
import sqlite3
connection = sqlite3.connect('recruit.db')
result_pd = pd.read_sql('select * from recruit',connection)
将礼包ID和礼包名称存为字典
df_libao.set_index(‘礼包ID’)[‘礼包名称’].to_dict()
- pandas写入Excel多sheet
writer=pd.ExcelWriter('filename.xlsx')
...
df1.to_excel(writer,sheet_name='第一表',index=0)
df2.to_excel(writer,sheet_name='第二表',index=0) #index=0:无索引
writer.save()
writer.close()
- 重置索引否则生成结果会丢失列名
call_log_sum = call_log.loc[:, ['uuid', 'call_second']].groupby(['uuid']).sum().reset_index()
以上是关于pandas使用的主要内容,如果未能解决你的问题,请参考以下文章