P2

题题题。。。

【问题一】 如何更改列或行的顺序?如何交换奇偶行(列)的顺序?

答:①可以使用 reindex() 函数来从新定义行 或 列的顺序

df.reindex(index=[行名排序...])
df.reindex(columns=[列名的排序...])

② 有点难度。。。

【问题二】 如果要选出DataFrame的某个子集,请给出尽可能多的方法实现

答:
按 索引方式可分为 单行(列)索引,多行(列)索引,混合索引,函数式索引
按 方法可分为、df.loc()、df.iloc()、df.query()
或者简单暴力的切片形式 df[a: b]

【问题三】 query函数比其他索引方法的速度更慢吗?在什么场合使用什么索引最高效?

答:
①query 函数比其他索引方法更快,可以避免潜在的数据在不同内存缓存间的移动,节省内存,语法简洁。
②当 DataFrame 占用内存较多时,推荐使用 eval()/query()

【问题四】 单级索引能使用Slice对象吗?能的话怎么使用,请给出一个例子。

答:能

import pandas as pd
df = pd.read_csv(r'C:\Users\YANG\Desktop\joyful-pandas-master\data\table.csv', index_col='ID')
idx = pd.IndexSlice
print(df.loc[idx[df['Math']>90]])

'''
     School Class Gender   Address  Height  Weight  Math Physics
ID                                                              
1201    S_1   C_2      M  street_5     188      68  97.0      A-
2304    S_2   C_3      F  street_6     164      81  95.5      A-
'''

【问题五】 如何快速找出某一列的缺失值所在索引?

答:

df = pd.DataFrame({'A':list('abcde')}) # 创建,使用默认索引
df = df.assign(B=pd.Series(list('efgi'))) # 增加一列,故意少一个元素
print(df) # 打印 df 看看
print(np.where(df['B'].isnull())) # 找索引
'''
   A    B
0  a    e
1  b    f
2  c    g
3  d    i
4  e  NaN

(array([4], dtype=int64),) # 4 就代表了缺少的元素的索引值

'''

【问题六】 索引设定中的所有方法分别适用于哪些场合?怎么直接把某个DataFrame的索引换成任意给定同长度的索引?

答:
① reindex和reindex 用于重新索引,很多时候用于重新排序

② set_index和reset_index 重新设定索引,可把某些列设置为索引

③ rename_axis针对多级索引的方法,作用是修改某一层的索引名,而不是索引标签和rename方法用于修改列或者行索引标签,而不是索引名

【问题七】 对于多层索引,怎么对内层进行条件筛选?

答:
参考答案:

df_s.loc[idx['B':,df_s.iloc[:,0]>0.6],:]

【问题八】 swaplevel 中的axis参数为1时,代表什么意思?i和j只能是数值型吗?

答:
① axis = 1表示对行操作,axis = 0表示对列操作
② i 和 j 一般都是数值型(表示绝对位置),但其也可以是字符串型(即列名,行名)

【练习一】 现有一份关于UFO的数据集,请解决下列问题:

import pandas as pd

df = pd.read_csv(r'C:\Users\YANG\Desktop\joyful-pandas-master\data\UFO.csv')
print(df.head())
           datetime     shape  duration (seconds)   latitude   longitude
0  10/10/1949 20:30  cylinder              2700.0  29.883056  -97.941111
1  10/10/1949 21:00     light              7200.0  29.384210  -98.581082
2  10/10/1955 17:00    circle                20.0  53.200000   -2.916667
3  10/10/1956 21:00    circle                20.0  28.978333  -96.645833
4  10/10/1960 20:00     light               900.0  21.418056 -157.803611

(a)在所有被观测时间超过60s的时间中,哪个形状最多?
答:利用多层索引

df = pd.read_csv(r'C:\Users\YANG\Desktop\joyful-pandas-master\data\UFO.csv')
print(df.head())
print(df[df['duration (seconds)']>60]['shape'].value_counts().index[0])  # light

【练习二】 现有一份关于口袋妖怪的数据集,请解决下列问题:

import pandas as pd

df = pd.read_csv(r'C:\Users\YANG\Desktop\joyful-pandas-master\data\Pokemon.csv')
print(df.head())
   #                   Name Type 1  ... Speed  Generation  Legendary
0  1              Bulbasaur  Grass  ...    45           1      False
1  2                Ivysaur  Grass  ...    60           1      False
2  3               Venusaur  Grass  ...    80           1      False
3  3  VenusaurMega Venusaur  Grass  ...    80           1      False
4  4             Charmander   Fire  ...    65           1      False

a)双属性的Pokemon占总体比例的多少?
答:由于属性1 必然存在,所以只需检查属性2是否存在就能统计双属性的个数

a = df['Type 2'].count()  # 414
b = df.shape[0]  # 800
print(a/b)  # 0.5175

(b)在所有种族值(Total)不小于580的Pokemon中,非神兽(Legendary=False)的比例为多少?

a = df[df['Total'] >= 580]['Legendary']  
print(a.count()) # 113
print(a.value_counts())  # False 48
print(48/113)  # 0.4247

(c)在第一属性为格斗系(Fighting)的Pokemon中,物攻排名前三高的是哪些?

print(df[df['Type 1'] == 'Fighting'].sort_values(by='Attack', ascending=False).head(3))
'''
       #                 Name    Type 1  ... Speed  Generation  Legendary
498  448  LucarioMega Lucario  Fighting  ...   112           4      False
594  534           Conkeldurr  Fighting  ...    45           5      False
74    68              Machamp  Fighting  ...    55           1      False
'''
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值