b站pandas编程练习100例

题1 使用 List 构造 Series

  使用 pandas,把下方数据 List,变为一个 Series,将 Series 输出到命令行

  courses=['语文','数学','英语','计算机']

题解:

  import pandas as pd

  courses=['语文','数学','英语','计算机']

  pd.Series(courses)

题2 使用 Dict 构造 Series

  使用 pandas,把下方数据 Dict,变为一个 Series,将 Series 输出到命令行

  grades={'语文':80,'数学':90,'英语':85,'计算机':100}

题解:

  import pandas as pd

  grades={'语文':80,'数学':90,'英语':85,'计算机':100}

  pd.Series(grades)

题3 将 Series 转换为 List

  使用 pandas,将 Series 变成一个数据 List,将 List 输出到命令行

  import pandas as pd

  grades={'语文':80,'数学':90,'英语':85,'计算机':100}

  ser=pd.Series(grades)

题解:

  ser.tolist()

题4 将 Series 转换为 DataFrame

  将 Series 变为一个数据 DataFrame,数据列命名为 grade,输出到命令行

  import pandas as pd

  grades={'语文':80,'数学':90,'英语':85,'计算机':100}

  ser=pd.Series(grades)

题解:

  pd.DataFrame(ser,columns=['grade'])

题5 用 Numpy 创建 Series

  使用 numpy 和 pandas 配合完成

  注意:类型 float,数值10~90,每两个数字间隔10

题解:

  import pandas as pd

  import numpy as np

  index=np.arange(101,110)

  data=np.arange(10,100,10,dtype=float)

  pd.Series(data,index)

题6 转换 Series 的数据类型

  输入:Series,字符串类型

  import pandas as pd

  s=pd.Series(data=['001','002','003','004'],index=list('abcd'))

  输出:Series,数字类型

题解:

  # 方法一:astype()

  s.astype(int)

  # 方法二:map()

  s.map(int)

  # 方法三:apply()

  def to_int(x):

    return int(x)

  s.apply(to_int)

题7 给 Series 添加元素

  输入:Series

  import pandas as pd

  grades={'语文':80,'数学':90,'英语':85,'计算机':100}

  ser=pd.Series(grades)

  处理:添加2个元素到 Series

题解:

# 方法一:append()

  dic2={'物理':88,'化学':96}

  ser2=pd.Series(dic2)

  ser.append(ser2)

# 方法二:直接添加

  ser['物理']=88

  ser['化学']=96

  ser

题8 Series 转化为 DataFrame

  输入:Series

  import pandas as pd

  grades={'语文':80,'数学':90,'英语':85,'计算机':100}

  ser=pd.Series(grades)

  输出:DataFrame

  注意:结果 DataFrame 有两列,列名需要设定

题解:

  # ser.reset_index():把 Series 的索引列重置为 DataFrame 的数据列之一

  # df.columns:通过属性修改列名

  df=ser.reset_index()

  df.columns=['course','grade']

  df

题9 创建一个 DataFrame

  提示:给 DataFrame 传一个字典创建

题解:

  import pandas as pd

  dic={'姓名':['小张','小王','小李','小赵'],

  '性别':['男','女','男','女'],

  '年龄':[18,19,20,18]}

  pd.DataFrame(dic)

题10 设置 DataFrame 的索引列

  输入:DataFrame

  输出:设置了索引列的 DataFrame

  import pandas as pd

  dic={'姓名':['小张','小王','小李','小赵'],

  '性别':['男','女','男','女'],

  '年龄':[18,19,20,18]}

  df=pd.DataFrame(dic)

题解: 

  # 方法一:set_index()

  df.set_index('姓名')

  # 方法二:index、drop()

  df.index=df['姓名']

  df.drop(columns='姓名')

  df

题11 生成一个月份的所有天

  输出:2021年10月,一个月的日期列表

题解:

  import pandas as pd

  pd.date_range('2021-10-01',periods=31,freq='D')

  # pd.date_range('2021-10-01','2021-10-31',freq='D')

题12 生成一年的所有周一

  输出:2021年,所有周一的日期列表

题解:

  import pandas as pd

  pd.date_range(start='2021-01-01',end='2021-12-31',freq='W-MON')

题13 生成一天中所有的小时

  输出:2021-10-01,当天所有的小时时间

题解:

  import pandas as pd

  # pd.date_range('2021-10-01',periods=24,freq='H')

  pd.date_range('2021-10-01','2021-10-02',freq='H',closed='left')# 左闭右开

题14 生成日期 DataFrame

  输出:DataFrame,包含2021年10月的31天,以及每天是2021年的第几天

题解:

  import pandas as pd

  # import datetime as dt

  data=pd.date_range('2021-10',periods=31)

  df=pd.DataFrame(data,columns=['day'])

  df['day_of_year']=df['day'].dt.dayofyear # dt 访问日期的方法,dayofyear 返回是本年第几天的属性

  df

题15 生成日期和随机分布 DataFrame

  输出:DataFrame,包含三列

  1000个日期作为索引,从2021-01-01开始

  数据列:正态分布1000个随机数,loc=0,scale=1

  数据列:均匀分布1000个随机数,low=0,high=1

  数据列:二项分布1000个随机数,n=1,p=0.2

题解:

  import pandas as pd

  import numpy as np

  index=pd.date_range('2021-01-01',periods=1000)

  dic={'norm':np.random.normal(loc=0,scale=1,size=1000),

  'uniform':np.random.uniform(low=0,high=1,size=1000),

  'binomial':np.random.binomial(n=1,p=0.2,size=1000)}

  pd.DataFrame(dic,index)

题16 打印 DataFrame 的前后数据行

  输入:DataFrame

  import pandas as pd

  index=pd.date_range('2021-01-01',periods=1000)

  dic={'norm':np.random.normal(loc=0,scale=1,size=1000),

  'uniform':np.random.uniform(low=0,high=1,size=1000),

  'binomial':np.random.binomial(n=1,p=0.2,size=1000)}

  df=pd.DataFrame(dic,index)

  输出:打印 df 的前面10行,打印空行,打印 df 的后面5行

题解:

  import pandas as pd

  df.head(10)

  print('\n')

  df.tail()

题17 查看 df 的信息和基本数据统计

  输入:DataFrame

  import pandas as pd

  index=pd.date_range('2021-01-01',periods=1000)

  dic={'norm':np.random.normal(loc=0,scale=1,size=1000),

  'uniform':np.random.uniform(low=0,high=1,size=1000),

  'binomial':np.random.binomial(n=1,p=0.2,size=1000)}

  df=pd.DataFrame(dic,index)

  输出:查看多少行、多少列、类型等基本信息,打印空行,查看每列的平均值、最小值、最大值、中位数等统计信息

题解:

  import pandas as pd

  df.info()

  print('\n')

  df.describe()

题18 统计数据列的值出现次数

  输入:对如下 df,计算 binomial 列每个值出现了多少次

  import pandas as pd

  index=pd.date_range('2021-01-01',periods=1000)

  dic={'norm':np.random.normal(loc=0,scale=1,size=1000),

  'uniform':np.random.uniform(low=0,high=1,size=1000),

  'binomial':np.random.binomial(n=1,p=0.2,size=1000)}

  df=pd.DataFrame(dic,index)

题解:

  import pandas as pd

  # 方法一:df['...'].value_counts()

  df['binomial'].value_counts()

  # 方法二:df.groupby()...count()

  df.groupby(by=['binomial'])['binomial'].count()

题19 df 前 n 行存入 csv 文件

  输入:对如下数据 df,取前100行记录,存入 csv 文件

  import pandas as pd

  index=pd.date_range('2021-01-01',periods=1000)

  dic={'norm':np.random.normal(loc=0,scale=1,size=1000),

  'uniform':np.random.uniform(low=0,high=1,size=1000),

  'binomial':np.random.binomial(n=1,p=0.2,size=1000)}

  df=pd.DataFrame(dic,index)

题解:

  import pandas as pd

  df_100=df.iloc[:100,:]

  df_100.to_csv('题19_b站pandas编程练习100例.csv')

题20 加载 csv 文件到 df

  注意:保留日期为索引列

题解:

  import pandas as pd

  # index_col 默认不使用第一列作为索引,设定 index_col 列索引为某一列设定 engine 可避免文件中文命名导致的 csv 初始化失败

  pd.read_csv('题19_b站编程练习100例.csv',engine='python',index_col=0)

题21 加载股票 csv 文件到 df

  某互联网公司股票数据,数据是 csv 格式,使用 pandas 加载到 df,进行打印

题解:

  import pandas as pd

  df=pd.read_csv('internet_company_stock_data.csv')

  df

题22 查看基本信息和数据统计

  数据是 csv 格式,加载到 dataframe,查看数据的基本信息,查看基本数据统计

题解:

  import pandas as pd

  df=pd.read_csv('internet_company_stock_data.csv',index_col=0) # 把第0列作为索引

  df.info()

  df.describe()

题23 更改索引列为普通数据列

  某互联网公司股票数据,数据是 csv 格式,以 index_col=0,加载 dataframe,把 data 列变为普通列

  import pandas as pd

  df=pd.read_csv('internet_company_stock_data.csv',index_col=0) # 把第0列作为索引

题解:

  df2.reset_index() # 重置为默认数字索引

题24 给数据添加月份和年份

  某互联网公司股票数据,数据是 csv 格式,加载到 dataframe,给数据添加列:月份、年份,打印结果 dataframe

题解:

  import pandas as pd

  df=pd.read_csv('internet_company_stock_data.csv')

  # 方法一:.dt.year / .dt.month

  df['Date']=pd.to_datetime(df['Date']) # 设为日期类型

  df['Month']=df['Date'].dt.month # 时间类型.dt可访问属性

  df['Year']=df['Date'].dt.year

  df.set_index('Date')

  # 方法二:apply()

  df['Date']=pd.to_datetime(df['Date']) # 设为日期类型

  def to_month(x):

    x=str(x)

    x=x[5:7]

    return x

  def to_year(x):

    x=str(x)

    x=x[0:4]

    return x

  df['Month']=df['Date'].apply(to_month)

  df['Year']=df['Date'].apply(to_year)

  df.set_index('Date')

题25 计算股票每年份的平均收盘价

  某互联网公司股票数据,数据是 csv 格式,加载到 dataframe,给数据添加列:年份,计算每年的平均收盘价

题解:

  import pandas as pd

  df=pd.read_csv('internet_company_stock_data.csv')

  df['Date']=pd.to_datetime(df['Date']) # 设为日期格式

  df['Year']=df['Date'].dt.year # .dt.year访问时间属性

  df.groupby(by=['Year'])['Close'].mean()

题26 找出收盘价最低的数据行

  某互联网公司股票数据,数据是 csv 格式,加载到 dataframe,找出收盘价最低的索引,根据索引找出数据行,打印结果数据行

题解:

  import pandas as pd

  df=pd.read_csv('internet_company_stock_data.csv',index_col=0)

  idx=df['Close'].argmin() # 返回最小值的索引

  df.loc[idx,:] # 通过索引取记录

题27 筛选出部分数据列

  某互联网公司股票数据,数据是 csv 格式,加载到 dataframe,只筛选出如下数据列的 df:Date、Open、Close、Volume

题解:

  import pandas as pd

  df=pd.read_csv('internet_company_stock_data.csv')

  df[['Date','Open','Close','Volume']]

  df.set_index('Date')

题28 设置日期列为索引列

  某互联网公司股票数据,数据是 csv 格式,加载到 dataframe,设置 Date 列为索引列,打印结果 dataframe

题解:

  import pandas as pd

  # 方法一:index_col参数

  # pd.read_csv('internet_company_stock_data.csv',index_col=0)

  # 方法二:set_index()

  df=pd.read_csv('internet_company_stock_data.csv')

  df.set_index('Date')

题29 删除不需要的数据列

  某互联网公司股票数据,数据是 csv 格式,加载到 dataframe,删除 High、Low 两列,打印结果 dataframe

题解:

  import pandas as pd

  df=pd.read_csv('internet_company_stock_data.csv',index_col=0)

  # 方法一:drop()

  df=df.drop(columns=['High','Low'])

  df

  # 方法二:del,不过一次只能删除一列

  del df['High']

  del df['Low']

  df

题30 对数据列重命名
  某互联网公司股票数据,数据是 csv 格式,加载到 dataframe,重命名数据列:Date->D,Open->O,High->H,Low->L,Close->C,Volume->V
题解:

  import pandas as pd

  df=pd.read_csv('internet_company_stock_data.csv')

  # 方法一:df.rename()

  df=df.rename(columns={'Date':'D','Open':'O','High':'H','Low':'L','Close':'C','Volume':'V'})# 用字典形式一对一重命名

  df

  # 方法二:df.columns属性

  df.columns=['D','O','H','L','C','V']

  df

题31 加载电信客户流失数据集

  目标:加载数据集到 pandas,查看数据集的前几行

题解:

  import pandas as pd

  df=pd.read_csv('Telco-Customer-Churn.csv')

  df.head()

题32 计算每一数据列的缺失值

题解:

  import pandas as pd

  df=pd.read_csv('Telco-Customer-Churn.csv')

  df.isnull().sum()

题33 正确设置数据列的类型

  使用 df.info,会发现 TotalCharges 是 Object 类型,找出原因(查看分布),修正为 float 数字类型(中位数填充),查看新的数据分布

题解:

  import pandas as pd

  df=pd.read_csv('Telco-Customer-Churn.csv')

  df['TotalCharges'].value_counts() # 发现有空格统计出现了11次,导致类型为object

  df_no_space=df[df['TotalCharges']!=' '] # 过滤掉空值

  med=df_no_space['TotalCharges'].median() # 取到中位数

  df.loc[df['TotalCharges']==' ','TotalCharges']=med # 用中位数代替空值

  df['TotalCharges'].value_counts() # 确认空值不存在

  df['TotalCharges']=df['TotalCharges'].astype(float) # astype修改Series类型

  df.info() # 确认类型被修改为float

 题34 将类别字段转换成 cat 类型

  批量转换类型:tenure / MonthlyCharges / TotalCharges 转换成 float 类型,将其他列转换成 categorical 数据类型

  import pandas as pd

  df=pd.read_csv('Telco-Customer-Churn.csv')

  df_no_space=df[df['TotalCharges']!=' ']

  med=df_no_space['TotalCharges'].median()

  df.loc[df['TotalCharges']==' ','TotalCharges']=med

题解:

  to_float=['tenure','MonthlyCharges','TotalCharges']

  total=df.columns

  to_cat=set(total)-set(to_float) # 取差集

  for e1 in to_float:

  df[e1]=df[e1].astype(float) # astype转换为float类型

  for e2 in to_cat:

  df[e2]=pd.Categorical(df[e2]) # Categorical转换为category类型

  df.info() # 确认数据类型被修改

 题35 对 cat 类型字段数据统计

  只筛选出 Categorical 数据类型,实现描述性数据统计

  import pandas as pd

  df=pd.read_csv('Telco-Customer-Churn.csv')

  df_no_space=df[df['TotalCharges']!=' ']

  med=df_no_space['TotalCharges'].median()

  df.loc[df['TotalCharges']==' ','TotalCharges']=med

  to_float=['tenure','MonthlyCharges','TotalCharges']

  total=df.columns

  to_cat=set(total)-set(to_float)

  for e1 in to_float:

  df[e1]=df[e1].astype(float)

  for e2 in to_cat:

  df[e2]=pd.Categorical(df[e2])

题解:

  df.describe(include=['category']) # 输出结果的格式不同于小数类型的

题36 Churn 字段的数据分布

  Churn表示客户是否流失,统计该字段的数据分布

题解:

  import pandas as pd

  df=pd.read_csv('Telco-Customer-Churn.csv')

  df['Churn'].value_counts() # 分类数据计数,数值数据排序

题37 多维度查看月费字段统计

  维度:Churn 表示客户是否流失,PaymentMethod 表示支付方式

  指标:MonthlyCharges 表示月费

题解:

  df.groupby(by=['Churn','PaymentMethod'])['MonthlyCharges'].mean()

题38 Churn 字段的数据映射

  Churn 表示客户是否流失,实现字符串到数字的映射,Yes->1,No->0

题解:

  import pandas as pd

  df=pd.read_csv('Telco-Customer-Churn.csv')

  # 方法一:map、dictionary

  dic={'Yes':1,'No':0}

  df['Churn'].map(dic)

  # 方法二:apply

  def to_int(x):

  if x=='Yes':

    return 1

  elif x=='No':

    return 0

  df['Churn'].apply(to_int)

题39 查看字段相关性矩阵

  统计 dataframe 的相关性矩阵,查看字段之间的相关性

题解:

  import pandas as pd

  df=pd.read_csv('Telco-Customer-Churn.csv')

  df.corr() # 只会计算数据类型之间的相关性

题40 从数据集中采样数据行

采样10条数据,将结果存入 sample10.csv

题解:

  import pandas as pd

  df=pd.read_csv('Telco-Customer-Churn.csv')

  df_sample10=df.sample(10)

  df_sample10.to_csv('sample10.csv')

题41 合并两个 Series 生成一个 DateFrame

  合并如下两个 Series 到 DateFrame,列名改为 col1、col2

  import pandas as pd

  import numpy as np

  np.random.seed(66)

  s1=pd.Series(np.random.rand(20))

  s2=pd.Series(np.random.randn(20))

题解:

  df=pd.concat([s1,s2],axis=1)

  df.columns=['col1','col2']

  df

题42 使用多个条件复杂筛选 DataFrame

  筛选如下 DataFrame,条件为:col2>=0.0,col2<=1.0

  import pandas as pd

  import numpy as np

  np.random.seed(66)

  s1=pd.Series(np.random.rand(20))

  s2=pd.Series(np.random.randn(20))

  df=pd.concat([s1,s2],axis=1)

  df.columns=['col1','col2']

题解:

  import pandas as pd

  df[(df['col2']>=0)&(df['col2']<=1)]

题43 根据现有列新增一个新的数据列

  新增数据列 col3:如果 col2>=0,col3 是1;否则,col3 是 -1

  import pandas as pd

  import numpy as np

  np.random.seed(66)

  s1=pd.Series(np.random.rand(20))

  s2=pd.Series(np.random.randn(20))

  df=pd.concat([s1,s2],axis=1)

  df.columns=['col1','col2']

题解:

  import pandas as pd

  # 方法一:apply

  def new_list(x):

  if x>=0:

    return 1

  else:

    return -1

  df['col3']=df['col2'].apply(new_list)

  df

  # 方法二:map

  df['col3']=df['col2'].map(lambda x:1 if x>=0 else -1)

  df

题44 根据现有列新增截数值数据列

  新增数据列 col4:将 col2 截断到 [-1,1],即如果小于 -1,则等于 -1;如果大于1,则等于1

  import pandas as pd

  import numpy as np

  np.random.seed(66)

  s1=pd.Series(np.random.rand(20))

  s2=pd.Series(np.random.randn(20))

  df=pd.concat([s1,s2],axis=1)

  df.columns=['col1','col2']

题解:

  import pandas as pd

  # 方法一:apply

  def cut_number(x):

  if x<-1:

    return -1

  elif x>1:

    return 1

  else:

    return x

  df['col4']=df['col2'].apply(cut_number)

  df

  # 方法二:clip

  df['col4']=df['col2'].clip(-1,1)

  df

题45 输出 dataframe 最大和最小的5个数字

  输出col2:最大的5个数字

  输出col2:最小的5个数字

  import pandas as pd

  import numpy as np

  np.random.seed(66)

  s1=pd.Series(np.random.rand(20))

  s2=pd.Series(np.random.randn(20))

  df=pd.concat([s1,s2],axis=1)

  df.columns=['col1','col2']

题解:

  df['col2'].nlargest(5)

  df['col2'].nsmallest(5)

题46 输出 dataframe 数字的累计加和值

  输出 col1:累积加和值

  输出 col2:累积加和值

  import pandas as pd

  import numpy as np

  np.random.seed(66)

  s1=pd.Series(np.random.rand(20))

  s2=pd.Series(np.random.randn(20))

  df=pd.concat([s1,s2],axis=1)

  df.columns=['col1','col2']

题解:

  df['col1'].cumsum()

  df['col2'].cumsum()

  df.cumsum()

题47 计算 dataframe 某一列数字中位数

  输出col2:中位数计算值

  import pandas as pd

  import numpy as np

  np.random.seed(66)

  s1=pd.Series(np.random.rand(20))

  s2=pd.Series(np.random.randn(20))

  df=pd.concat([s1,s2],axis=1)

  df.columns=['col1','col2']

题解:

  # 方法一:median

  df['col2'].median()

  # 方法二:quantile,默认q=0.5

  df['col2'].quantile(q=0.5)

题48 按条件筛选 df 输出过滤后的结果

  过滤出 col2 大于0的数据

  import pandas as pd

  import numpy as np

  np.random.seed(66)

  s1=pd.Series(np.random.rand(20))

  s2=pd.Series(np.random.randn(20))

  df=pd.concat([s1,s2],axis=1)

  df.columns=['col1','col2']

题解:

  # 方法一:df[cond]

  df[df['col2']>=0]

  # 方法二:loc[cond,:]

  df.loc[df['col2']>=0,:]

  # 方法三:query,类似sql写法

  df.query('col2>=0')

题49 将 df 前几行转换成数据字典

  取数据前5行,转换成字典形式

  import pandas as pd

  import numpy as np

  np.random.seed(66)

  s1=pd.Series(np.random.rand(20))

  s2=pd.Series(np.random.randn(20))

  df=pd.concat([s1,s2],axis=1)

  df.columns=['col1','col2']

题解:

  df_5=df.head()

  df_5.to_dict()

题50 将 df 前几行转换成 html 格式

  取数据前5行,转换成 html 格式

  import pandas as pd

  import numpy as np

  np.random.seed(66)

  s1=pd.Series(np.random.rand(20))

  s2=pd.Series(np.random.randn(20))

  df=pd.concat([s1,s2],axis=1)

  df.columns=['col1','col2']

题解:

  df_5=df.head()

  df_5.to_html()

题51 按列名筛选 df 使用 .loc 方法进行

  对如下 df,怎样用 df.loc 筛选数据,使得 C 数据列大于0.8

  import pandas as pd

  import numpy as np

  np.random.seed(66)

  df=pd.DataFrame(np.random.rand(10,4),columns=list('ABCD'))

题解:

  df.loc[df['C']>0.8]

题52 多条件组合筛选 dataframe

  对如下 df,怎样筛选数据,使得 C 数据列大于0.3,D 数据列小于0.7

  import pandas as pd

  import numpy as np

  np.random.seed(66)

  df=pd.DataFrame(np.random.rand(10,4),columns=list('ABCD'))

题解:

  # 方法一:df[cond]

  df[(df['C']>0.3)&(df['D']<0.7)]

  # 方法二:loc[cond,:]

  df.loc[(df['C']>0.3)&(df['D']<0.7),:]

  # 方法三:query,类似sql写法

  df.query('C>0 and D<0.7')

题53 怎样用 for 循环遍历 dataframe

  对如下 df,使用 for 循环遍历前5行,打印每行的数

  import pandas as pd

  import numpy as np

  np.random.seed(66)

  df=pd.DataFrame(np.random.rand(10,4),columns=list('ABCD'))

题解:

  # 方法一:iterrows,返回 (index, Series) 元组

  for ind,ser in df.iterrows():

    print(ser)

  # 方法二:loc根据索引取整行数

  for i in df.index:

    print(df.loc[i])

题54 指定单元格设置 DataFrame 的值

  对如下 df,设置两个单元格的值:

  使用 iloc,设定 (3,B) 的值是 NaN

  使用 loc,设定 (8,D) 的值是 NaN

  import pandas as pd

  import numpy as np

  np.random.seed(66)

  df=pd.DataFrame(np.random.rand(10,4),columns=list('ABCD'))

题解:

  df.iloc[3,1]=np.nan

  df.loc[8,'D']=np.nan

题55 移除 df 中数据值为空的行

  对如下 df,移除包含 nan 的行,将结果赋值给 df2

  import pandas as pd

  import numpy as np

  np.random.seed(66)

  df=pd.DataFrame(np.random.rand(10,4),columns=list('ABCD'))

  df.iloc[3,1]=np.nan

  df.loc[8,'D']=np.nan

题解:

  # 方法一:dropna

  df.dropna(inplace=True)

  df2=df

  df2

  # 方法二:iterows、drop

  for ind,ser in df.iterrows():

    if ser.isnull().any()==True:

      df.drop(index=ind,inplace=True)

  df2=df

  df2

题56 重新设置索引列

  移除列之后,index 缺少数字,怎样重置 index

  import pandas as pd

  import numpy as np

  np.random.seed(66)

  df=pd.DataFrame(np.random.rand(10,4),columns=list('ABCD'))

  df.iloc[3,1]=np.nan

  df.loc[8,'D']=np.nan

  df.dropna(inplace=True)

题解:

  df.reset_index(drop=True) # 重设索引列后,drop=True 将原索引列移除

 题57 统计 df 每个数据列的缺失值个数

  import pandas as pd

  import numpy as np

  np.random.seed(66)

  df=pd.DataFrame(np.random.rand(10,4),columns=list('ABCD'))

  df.iloc[3,1]=np.nan

  df.loc[8,'D']=np.nan

题解:

  df.isnull().sum()

题58 使用数字填充 df 缺失值

  使用数字0,填充数据缺失值

  import pandas as pd

  import numpy as np

  np.random.seed(66)

  df=pd.DataFrame(np.random.rand(10,4),columns=list('ABCD'))

  df.iloc[3,1]=np.nan

  df.loc[8,'D']=np.nan

题解:

  df.fillna(0)

题59 修改 df 数据列的前后顺序

  怎样把列的顺序,变为 'D','A','B','C'

  import pandas as pd

  import numpy as np

  np.random.seed(66)

  df=pd.DataFrame(np.random.rand(10,4),columns=list('ABCD'))

题解:

  df=df[['D','A','B','C']] # 按顺序取出多列,再赋值给原 df

题60 删除 df 指定的数据列

  怎样删除数据列D,或数据列C、D

  import pandas as pd

  import numpy as np

  np.random.seed(66)

  df=pd.DataFrame(np.random.rand(10,4),columns=list('ABCD'))

题解:

  df.drop(columns=['C'],inplace=True)

  df.drop(columns=['C','D'],inplace=True)

题61 二手车-数据介绍和加载

  使用 pandas 加载数据集

题解:

  import pandas as pd

  df=pd.read_csv('used_cars.csv',index_col=0)

题62 二手汽车-输出 df 标题名称列表

  import pandas as pd

  pd.read_csv('used_cars.csv',index_col=0)

题解:

  df.columns

题63 两只股票-读取股票数据 csv

  有两个 csv 文件,加载到 pandas,将日期作为索引列

题解:

  import pandas as pd

  pd.read_csv('stock.BIDU.csv',index_col='Date')

  pd.read_csv('stock.IQ.csv',index_col='Date')

题64 两只股票数据-批量给列名加前缀

  分别给来自 bidu 的所有列名加上 bidu_ 前缀,给来自 iq 的列名所有列名加上 iq_ 前缀

  import pandas as pd

  bidu=pd.read_csv('stock.BIDU.csv',index_col='Date')

  iq=pd.read_csv('stock.IQ.csv',index_col='Date')

题解:

  bidu.columns=['bidu_'+col.lower() for col in bidu.columns]

  iq.columns=['iq_'+col.lower() for col in iq.columns]

题65 两只股票-按日期关联两个 df

  import pandas as pd

  bidu=pd.read_csv('stock.BIDU.csv',index_col='Date')

  iq=pd.read_csv('stock.IQ.csv',index_col='Date')

  bidu.columns=['bidu_'+col.lower() for col in bidu.columns]

  iq.columns=['iq_'+col.lower() for col in iq.columns]

题解:

  df12=pf.merge(bidu,iq,on=['Date'])

题66 两只股票-筛选所需要的列

  import pandas as pd

  bidu=pd.read_csv('stock.BIDU.csv',index_col='Date')

  iq=pd.read_csv('stock.IQ.csv',index_col='Date')

  bidu.columns=['bidu_'+col.lower() for col in bidu.columns]

  iq.columns=['iq_'+col.lower() for col in iq.columns]

  df12=pf.merge(bidu,iq,on=['Date'])

题解:

  df12[['bidu_open','bidu_close','iq_open','iq_close']]

题67 两只股票-计算每只股票当日涨跌幅

  当日涨跌幅=(收盘价-开盘价)/ 开盘价

  import pandas as pd

  bidu=pd.read_csv('stock.BIDU.csv',index_col='Date')

  iq=pd.read_csv('stock.IQ.csv',index_col='Date')

  bidu.columns=['bidu_'+col.lower() for col in bidu.columns]

  iq.columns=['iq_'+col.lower() for col in iq.columns]

  df12=pf.merge(bidu,iq,on=['Date'])

  df12=df12[['bidu_open','bidu_close','iq_open','iq_close']]

题解:

  df12['bidu_rate']=(df12['bidu_close']-df12['bidu_open'])/df12['bidu_open']*100

  df12['iq_rate']=(df12['iq_close']-df12['iq_open'])/df12['iq_open']*100

题68 两只股票-计算同涨同跌的信号

  import pandas as pd

  bidu=pd.read_csv('stock.BIDU.csv',index_col='Date')

  iq=pd.read_csv('stock.IQ.csv',index_col='Date')

  bidu.columns=['bidu_'+col.lower() for col in bidu.columns]

  iq.columns=['iq_'+col.lower() for col in iq.columns]

  df12=pf.merge(bidu,iq,on=['Date'])

  df12=df12[['bidu_open','bidu_close','iq_open','iq_close']]

  df12['bidu_rate']=(df12['bidu_close']-df12['bidu_open'])/df12['bidu_open']*100

  df12['iq_rate']=(df12['iq_close']-df12['iq_open'])/df12['iq_open']*100

题解:

  df12['plus']=df12['bidu_rate']*df12['iq_rate']

  # 方法一:apply

  def sign(x):

  if x>0:

    return 1

  elif x<0:

    return 0

  df12['sign']=df12['plus'].apply(sign)

  # 方法二:map

  df12['sign']=df12['plus'].map(lambda x:1 if x>0 else 1)

题69 两只股票-计算同时涨跌的比例

  import pandas as pd

  bidu=pd.read_csv('stock.BIDU.csv',index_col='Date')

  iq=pd.read_csv('stock.IQ.csv',index_col='Date')

  bidu.columns=['bidu_'+col.lower() for col in bidu.columns]

  iq.columns=['iq_'+col.lower() for col in iq.columns]

  df12=pf.merge(bidu,iq,on=['Date'])

  df12=df12[['bidu_open','bidu_close','iq_open','iq_close']]

  df12['bidu_rate']=(df12['bidu_close']-df12['bidu_open'])/df12['bidu_open']*100

  df12['iq_rate']=(df12['iq_close']-df12['iq_open'])/df12['iq_open']*100

  df12['plus']=df12['bidu_rate']*df12['iq_rate']

  df12['sign']=df12['plus'].map(lambda x:1 if x>0 else 1)

题解:

  # 方法一:count

  up=df12[df12['sign']==1].count()/df12['sign'].count()*100

  down=df12[df12['sign']==0].count()/df12['sign'].count()*100

  # 方法二:sum、len

  up=df12['sign'].sum()/len(df12)*100

  down=1-up

-END

https://www.bilibili.com/video/BV1Nq4y1Z7Q8?p=10&vd_source=efad7d657bca9605bbc1590a798ed819

posted @ 2023-01-12 01:14  找回那所有、  阅读(1112)  评论(0)    收藏  举报
这里到底了哦~(●'◡'●)