#1.DataFrame基本操作
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
#将下⾯的字典创建为DataFrame
data = {"grammer":["Python","C","Java","GO",np.nan,"SQL","PHP","Python"],"score":[1,2,np.nan,4,5,6,7,10]}
df=pd.DataFrame(data)
#提取数据–提取含有字符串“Python”的⾏
df['grammer'] #提取某一列
df[df['grammer']=='Python'] #提取某一列中等于某个值的行
#提取列名;columns中文意思为:柱
df.columns
#修改第二列列名为‘popularity’
df.rename(columns={'score':'popularity'},inplace=True)
#inplace:是否用新生成的列表替换原列表
#columns: 以字典的形式,赋予列名新的值
#统计grammer列中每种编程语⾔出现的次数
df['grammer'].value_counts()#对某一列进行计数
#统计一共出现多少个不重复的编程语言
df['grammer'].nunique()
#缺失值用上下值均值填充
df['popularity']=df['popularity'].fillna(df['popularity'].interpolate())
df
#提取popularity列中值大于3的行
df[df['popularity']>3]
#按照grammer列进行去重(删除重复行)
df.drop_duplicates(['grammer'])
#计算popularity列平均值
df['popularity'].mean()
#将grammer列转换为list
df['grammer'].to_list()
#将dataframe保存为excel
#df.to_excel('f1.xlsx')
#查看数据行列数形状
df.shape
#提取popularity列值大于3小于7的行
df[(df['popularity']>3)&(df['popularity']<7)]
#交换两列的位置
df=df[['popularity','grammer']]
df
#提取popularity列最大值所在的行
df[df['popularity']==df['popularity'].max()]
#查看最后5行
df.tail()
#删除最后一行数据
df=df.drop(labels=df.shape[0]-1)
df
# #添加一行数据(方法已弃用)
# row = {'grammer':'Perl','popularity':6.6}
# df = df.append(row,ignore_index=True)
# df
#数据按照"popularity"列值的大小进行排序
df.sort_values("popularity",inplace=True)
#统计grammer列每个字符串的长度
df['grammer']=df['grammer'].fillna('R')
df['len_str']=df['grammer'].map(lambda x:len(x))
df
#读取本地EXCEL数据
df = pd.read_excel('pandas120/21-50数据.xlsx')
#将salary列数据转换为最⼤值与最⼩值的平均值
#因为我们的数据中是20k-35k这种字符串,所以需要先⽤正则表达式提取数字
import re
def func(df):
lst = df['salary'].split('-')
smin = int(lst[0].strip('k'))
smax = int(lst[1].strip('k'))
df['salary'] = int((smin + smax) / 2 * 1000)
return df
df = df.apply(func,axis=1)
#Pandas的apply() 法是用来调用一个函数(Python method),让此函数对数据对象进行批量处理
# func:函数或 lambda 表达式,应用于每行或者每列
# axis:{0 or ‘index’, 1 or ‘columns’}, 默认为0
# 0 or ‘index’: 表示函数处理的是每一列
# 1 or ‘columns’: 表示函数处理的是每一行
#将数据根据学历进⾏分组并计算平均薪资
df.groupby('education').mean()
#将createTime列时间转换为⽉-⽇
for i in range(len(df)):
df.iloc[i,0] = df.iloc[i,0].to_pydatetime().strftime("%m-%d")
df.head()
#查看索引、数据类型和内存信息
df.info()
#查看数值型列的汇总统计
df.describe()
#新增⼀列根据salary将数据分为三组
bins = [0,5000, 20000, 50000]
group_names = ['低', '中', '⾼']
df['categories'] = pd.cut(df['salary'], bins, labels=group_names)
df
# 按照salary列对数据降序排列
df.sort_values('salary', ascending=False)
# 取出第33⾏数据
df.loc[32]
# 计算salary列的中位数
np.median(df['salary'])
# 绘制薪资⽔平频率分布直⽅图
df.salary.plot(kind='hist');
# 绘制薪资⽔平密度曲线
df.salary.plot(kind='kde',xlim=(0,80000));
# 删除最后⼀列categories
del df['categories']
# 等价于
# df.drop(columns=['categories'], inplace=True)
# 将df的第⼀列与第⼆列合并为新的⼀列
df['test'] = df['education']+df['createTime']
# 将education列与salary列合并为新的⼀列
# salary为int类型,操作与35题有所不同
df["test1"] = df["salary"].map(str) + df['education']
#计算salary最⼤值与最⼩值之差
df[['salary']].apply(lambda x: x.max() - x.min())
#将第⼀⾏与最后⼀⾏拼接
pd.concat([df[:1], df[-2:-1]])
#将第8⾏数据添加⾄末尾
df.append(df.iloc[7])
#查看每列的数据类型
df.dtypes
#将createTime列设置为索引
df.set_index("createTime")
#⽣成⼀个和df长度相同的随机数dataframe
df1 = pd.DataFrame(pd.Series(np.random.randint(1, 10,len(df))))
df1
#将上⼀题⽣成的dataframe与df合并
df= pd.concat([df,df1],axis=1)
df
#⽣成新的⼀列new为salary列减去之前⽣成随机数列
df["new"] = df["salary"] - df[0]
df
#检查数据中是否含有任何缺失值
df.isnull().values.any()
#将salary列类型转换为浮点数
df['salary'].astype(np.float64)
#计算salary⼤于10000的次数
len(df[df.salary>10000])
#查看每种学历出现的次数
df.education.value_counts()
#查看education列共有⼏种学历¶
df.education.nunique()
#提取salary与new列的和⼤于60000的最后3⾏
df[(df.salary+df.new>60000)].tail(3)
Pandas 120 test question code answers and analysis ---- machine learning
Guess you like
Origin blog.csdn.net/m0_56501550/article/details/131075169
Recommended
Ranking