Pandas 120 テスト問題コードの回答と分析 ---- 機械学習

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

おすすめ

転載: blog.csdn.net/m0_56501550/article/details/131075169