归纳推理测试没做完_Pandas50道练习题,Numpy100道没做完的同学不许点开!

归纳推理测试没做完_Pandas50道练习题,Numpy100道没做完的同学不许点开!

——
本文依旧转载自Datawhale社区 Pandas 是基于 NumPy 的一种数据处理工具,该工具为了解决数据分析任务而创建。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的函数和方法。这些练习着重DataFrame和Series对象的基本操作,包括数据的索引、分组、统计和清洗。 友情提示: 代码虽好,自己动手才算学到。

基本操作

1.导入 Pandas 库并简写为 pd,并输出版本号

import&#xA0;pandas&#xA0;as&#xA0;pd<br>pd.__version__

2.从列表创建 Series

arr&#xA0;=&#xA0;[0,&#xA0;1,&#xA0;2,&#xA0;3,&#xA0;4]<br>df&#xA0;=&#xA0;pd.Series(arr)&#xA0;#&#xA0;&#x5982;&#x679C;&#x4E0D;&#x6307;&#x5B9A;&#x7D22;&#x5F15;&#xFF0C;&#x5219;&#x9ED8;&#x8BA4;&#x4ECE;&#xA0;0&#xA0;&#x5F00;&#x59CB;<br>df

3.从字典创建 Series

d&#xA0;=&#xA0;{'a':1,'b':2,'c':3,'d':4,'e':5}<br>df&#xA0;=&#xA0;pd.Series(d)<br>df

4.从 NumPy 数组创建 DataFrame

dates&#xA0;=&#xA0;pd.date_range('today',periods=6)&#xA0;#&#xA0;&#x5B9A;&#x4E49;&#x65F6;&#x95F4;&#x5E8F;&#x5217;&#x4F5C;&#x4E3A;&#xA0;index<br>num_arr&#xA0;=&#xA0;np.random.randn(6,4)&#xA0;#&#xA0;&#x4F20;&#x5165;&#xA0;numpy&#xA0;&#x968F;&#x673A;&#x6570;&#x7EC4;<br>columns&#xA0;=&#xA0;['A','B','C','D']&#xA0;#&#xA0;&#x5C06;&#x5217;&#x8868;&#x4F5C;&#x4E3A;&#x5217;&#x540D;<br>df1&#xA0;=&#xA0;pd.DataFrame(num_arr,&#xA0;index&#xA0;=&#xA0;dates,&#xA0;columns&#xA0;=&#xA0;columns)<br>df1

5.从CSV中创建 DataFrame,分隔符为;,编码格式为gbk

#&#xA0;df&#xA0;=&#xA0;pd.read_csv('test.csv',&#xA0;encoding='gbk,&#xA0;sep=';')

6.从字典对象data创建DataFrame,设置索引为labels

import&#xA0;numpy&#xA0;as&#xA0;np<br>data&#xA0;=&#xA0;{'animal':&#xA0;['cat',&#xA0;'cat',&#xA0;'snake',&#xA0;'dog',&#xA0;'dog',&#xA0;'cat',&#xA0;'snake',&#xA0;'cat',&#xA0;'dog',&#xA0;'dog'],'age':&#xA0;[2.5,&#xA0;3,&#xA0;0.5,&#xA0;np.nan,&#xA0;5,&#xA0;2,&#xA0;4.5,&#xA0;np.nan,&#xA0;7,&#xA0;3],'visits':&#xA0;[1,&#xA0;3,&#xA0;2,&#xA0;3,&#xA0;2,&#xA0;3,&#xA0;1,&#xA0;1,&#xA0;2,&#xA0;1],'priority':&#xA0;['yes',&#xA0;'yes',&#xA0;'no',&#xA0;'yes',&#xA0;'no',&#xA0;'no',&#xA0;'no',&#xA0;'yes',&#xA0;'no',&#xA0;'no']}<br>labels&#xA0;=&#xA0;['a',&#xA0;'b',&#xA0;'c',&#xA0;'d',&#xA0;'e',&#xA0;'f',&#xA0;'g',&#xA0;'h',&#xA0;'i',&#xA0;'j']<br>df&#xA0;=&#xA0;pd.DataFrame(data,&#xA0;index=labels)<br>df

7.显示DataFrame的基础信息,包括行的数量;列名;每一列值的数量、类型

df.info()#&#xA0;&#x65B9;&#x6CD5;&#x4E8C;#&#xA0;df.describe()

8.展示df的前3行

df.iloc[:3]#&#xA0;&#x65B9;&#x6CD5;&#x4E8C;#df.head(3)

9.取出df的animal和age列

df.loc[:,&#xA0;['animal',&#xA0;'age']]#&#xA0;&#x65B9;&#x6CD5;&#x4E8C;#&#xA0;df[['animal',&#xA0;'age']]

10.取出索引为[3, 4, 8]行的animal和age列

df.loc[df.index[[3,&#xA0;4,&#xA0;8]],&#xA0;['animal',&#xA0;'age']]

11.取出age值大于3的行

df[df['age']&#xA0;>&#xA0;3]

12.取出age值缺失的行

df[df['age'].isnull()]

13.取出age在2,4间的行(不含)

df[(df['age']>2)&#xA0;&&#xA0;(df['age']>4)]##df[df['age'].between(2,&#xA0;4)]

14.f行的age改为1.5

df.loc['f',&#xA0;'age']&#xA0;=&#xA0;1.5

15.计算visits的总和

df['visits'].sum()

16.计算每个不同种类animal的age的平均数

df.groupby('animal')['age'].mean()

17.在df中插入新行k,然后删除该行

#&#x63D2;&#x5165;<br>df.loc['k']&#xA0;=&#xA0;[5.5,&#xA0;'dog',&#xA0;'no',&#xA0;2]#&#xA0;&#x5220;&#x9664;<br>df&#xA0;=&#xA0;df.drop('k')<br>df

18.计算df中每个种类animal的数量

df['animal'].value_counts()

19.先按age降序排列,后按visits升序排列

df.sort_values(by=['age',&#xA0;'visits'],&#xA0;ascending=[False,&#xA0;True])

20.将priority列中的yes, no替换为布尔值True, False

df['priority']&#xA0;=&#xA0;df['priority'].map({'yes':&#xA0;True,&#xA0;'no':&#xA0;False})<br>df

21.将animal列中的snake替换为python

df['animal']&#xA0;=&#xA0;df['animal'].replace('snake',&#xA0;'python')<br>df

22.对每种animal的每种不同数量visits,计算平均age,即,返回一个表格,行是aniaml种类,列是visits数量,表格值是行动物种类列访客数量的平均年龄

df.pivot_table(index='animal',&#xA0;columns='visits',&#xA0;values='age',&#xA0;aggfunc='mean')

进阶操作

23.有一列整数列A的DatraFrame,删除数值重复的行

df&#xA0;=&#xA0;pd.DataFrame({'A':&#xA0;[1,&#xA0;2,&#xA0;2,&#xA0;3,&#xA0;4,&#xA0;5,&#xA0;5,&#xA0;5,&#xA0;6,&#xA0;7,&#xA0;7]})<br>print(df)<br>df1&#xA0;=&#xA0;df.loc[df['A'].shift()&#xA0;!=&#xA0;df['A']]#&#xA0;&#x65B9;&#x6CD5;&#x4E8C;#&#xA0;df1&#xA0;=&#xA0;df.drop_duplicates(subset='A')<br>print(df1)

24.一个全数值DatraFrame,每个数字减去该行的平均数

df&#xA0;=&#xA0;pd.DataFrame(np.random.random(size=(5,&#xA0;3)))<br>print(df)<br>df1&#xA0;=&#xA0;df.sub(df.mean(axis=1),&#xA0;axis=0)<br>print(df1)

25.一个有5列的DataFrame,求哪一列的和最小

df&#xA0;=&#xA0;pd.DataFrame(np.random.random(size=(5,&#xA0;5)),&#xA0;columns=list('abcde'))<br>print(df)<br>df.sum().idxmin()

26.给定DataFrame,求A列每个值的前3大的B的和

df&#xA0;=&#xA0;pd.DataFrame({'A':&#xA0;list('aaabbcaabcccbbc'),&#xA0;'B':&#xA0;[12,345,3,1,45,14,4,52,54,23,235,21,57,3,87]})<br>print(df)<br>df1&#xA0;=&#xA0;df.groupby('A')['B'].nlargest(3).sum(level=0)<br>print(df1)

27.给定DataFrame,有列A, B,A的值在1-100(含),对A列每10步长,求对应的B的和

df&#xA0;=&#xA0;pd.DataFrame({'A':&#xA0;[1,2,11,11,33,34,35,40,79,99],&#xA0;'B':&#xA0;[1,2,11,11,33,34,35,40,79,99]})<br>print(df)<br>df1&#xA0;=&#xA0;df.groupby(pd.cut(df['A'],&#xA0;np.arange(0,&#xA0;101,&#xA0;10)))['B'].sum()<br>print(df1)

28.给定DataFrame,计算每个元素至左边最近的0(或者至开头)的距离,生成新列y

df&#xA0;=&#xA0;pd.DataFrame({'X':&#xA0;[7,&#xA0;2,&#xA0;0,&#xA0;3,&#xA0;4,&#xA0;2,&#xA0;5,&#xA0;0,&#xA0;3,&#xA0;4]})<br>izero&#xA0;=&#xA0;np.r_[-1,&#xA0;(df['X']&#xA0;==&#xA0;0).to_numpy().nonzero()[0]]&#xA0;#&#xA0;&#x6807;&#x8BB0;0&#x7684;&#x4F4D;&#x7F6E;<br>idx&#xA0;=&#xA0;np.arange(len(df))<br>df['Y']&#xA0;=&#xA0;idx&#xA0;-&#xA0;izero[np.searchsorted(izero&#xA0;-&#xA0;1,&#xA0;idx)&#xA0;-&#xA0;1]<br>print(df)#&#xA0;&#x65B9;&#x6CD5;&#x4E8C;#&#xA0;x&#xA0;=&#xA0;(df['X']&#xA0;!=&#xA0;0).cumsum()#&#xA0;y&#xA0;=&#xA0;x&#xA0;!=&#xA0;x.shift()#&#xA0;df['Y']&#xA0;=&#xA0;y.groupby((y&#xA0;!=&#xA0;y.shift()).cumsum()).cumsum()#&#xA0;&#x65B9;&#x6CD5;&#x4E09;#&#xA0;df['Y']&#xA0;=&#xA0;df.groupby((df['X']&#xA0;==&#xA0;0).cumsum()).cumcount()#first_zero_idx&#xA0;=&#xA0;(df['X']&#xA0;==&#xA0;0).idxmax()#&#xA0;df['Y'].iloc[0:first_zero_idx]&#xA0;+=&#xA0;1

29.一个全数值的DataFrame,返回最大3值的坐标

df&#xA0;=&#xA0;pd.DataFrame(np.random.random(size=(5,&#xA0;3)))<br>print(df)<br>df.unstack().sort_values()[-3:].index.tolist()

30.给定DataFrame,将负值代替为同组的平均值

df&#xA0;=&#xA0;pd.DataFrame({'grps':&#xA0;list('aaabbcaabcccbbc'),&#xA0;'vals':&#xA0;[-12,345,3,1,45,14,4,-52,54,23,-235,21,57,3,87]})<br>print(df)def&#xA0;replace(group):<br>&#xA0;&#xA0;&#xA0;&#xA0;mask&#xA0;=&#xA0;group<0<br>&#xA0;&#xA0;&#xA0;&#xA0;group[mask]&#xA0;=&#xA0;group[~mask].mean()return&#xA0;group<br>df['vals']&#xA0;=&#xA0;df.groupby(['grps'])['vals'].transform(replace)<br>print(df)</0

31.计算3位滑动窗口的平均值,忽略NAN

df&#xA0;=&#xA0;pd.DataFrame({'group':&#xA0;list('aabbabbbabab'),'value':&#xA0;[1,&#xA0;2,&#xA0;3,&#xA0;np.nan,&#xA0;2,&#xA0;3,&#xA0;np.nan,&#xA0;1,&#xA0;7,&#xA0;3,&#xA0;np.nan,&#xA0;8]})<br>print(df)<br>g1&#xA0;=&#xA0;df.groupby(['group'])['value']<br>g2&#xA0;=&#xA0;df.fillna(0).groupby(['group'])['value']&#xA0;<br>s&#xA0;=&#xA0;g2.rolling(3,&#xA0;min_periods=1).sum()&#xA0;/&#xA0;g1.rolling(3,&#xA0;min_periods=1).count()<br>s.reset_index(level=0,&#xA0;drop=True).sort_index()&#xA0;

Series 和 Datetime索引

32.创建Series s,将2015所有工作日作为随机值的索引

dti&#xA0;=&#xA0;pd.date_range(start='2015-01-01',&#xA0;end='2015-12-31',&#xA0;freq='B')&#xA0;<br>s&#xA0;=&#xA0;pd.Series(np.random.rand(len(dti)),&#xA0;index=dti)<br>s.head(10)

33.所有礼拜三的值求和

s[s.index.weekday&#xA0;==&#xA0;2].sum()&#xA0;

34.求每个自然月的平均数

s.resample('M').mean()

35.每连续4个月为一组,求最大值所在的日期

s.groupby(pd.Grouper(freq='4M')).idxmax()

36.创建2015-2016每月第三个星期四的序列

pd.date_range('2015-01-01',&#xA0;'2016-12-31',&#xA0;freq='WOM-3THU')

数据清洗

df&#xA0;=&#xA0;pd.DataFrame({'From_To':&#xA0;['LoNDon_paris',&#xA0;'MAdrid_miLAN',&#xA0;'londON_StockhOlm',&#xA0;'Budapest_PaRis',&#xA0;'Brussels_londOn'],'FlightNumber':&#xA0;[10045,&#xA0;np.nan,&#xA0;10065,&#xA0;np.nan,&#xA0;10085],'RecentDelays':&#xA0;[[23,&#xA0;47],&#xA0;[],&#xA0;[24,&#xA0;43,&#xA0;87],&#xA0;[13],&#xA0;[67,&#xA0;32]],'Airline':&#xA0;['KLM(!)',&#xA0;'&#xA0;(12)',&#xA0;'(British&#xA0;Airways.&#xA0;)',&#xA0;'12.&#xA0;Air&#xA0;France',&#xA0;'"Swiss&#xA0;Air"']})<br>df

37.FlightNumber列中有些值缺失了,他们本来应该是每一行增加10,填充缺失的数值,并且令数据类型为整数

df['FlightNumber']&#xA0;=&#xA0;df['FlightNumber'].interpolate().astype(int)<br>df

38.将From_To列从_分开,分成From, To两列,并删除原始列

temp&#xA0;=&#xA0;df.From_To.str.split('_',&#xA0;expand=True)<br>temp.columns&#xA0;=&#xA0;['From',&#xA0;'To']<br>df&#xA0;=&#xA0;df.join(temp)<br>df&#xA0;=&#xA0;df.drop('From_To',&#xA0;axis=1)<br>df

39.将From, To大小写统一

df['From']&#xA0;=&#xA0;df['From'].str.capitalize()<br>df['To']&#xA0;=&#xA0;df['To'].str.capitalize()<br>df

40.Airline列,有一些多余的标点符号,需要提取出正确的航司名称。举例:'(British Airways. )’ 应该改为 ‘British Airways’.

df['Airline']&#xA0;=&#xA0;df['Airline'].str.extract('([a-zA-Z\s]+)',&#xA0;expand=False).str.strip()<br>df

41.Airline列,数据被以列表的形式录入,但是我们希望每个数字被录入成单独一列,delay_1, delay_2, …没有的用NAN替代。

delays&#xA0;=&#xA0;df['RecentDelays'].apply(pd.Series)<br>delays.columns&#xA0;=&#xA0;['delay_{}'.format(n)&#xA0;for&#xA0;n&#xA0;in&#xA0;range(1,&#xA0;len(delays.columns)+1)]<br>df&#xA0;=&#xA0;df.drop('RecentDelays',&#xA0;axis=1).join(delays)<br>df

层次化索引

42.用 letters = [‘A’, ‘B’, ‘C’] 和 numbers = list(range(10))的组合作为系列随机值的层次化索引

letters&#xA0;=&#xA0;['A',&#xA0;'B',&#xA0;'C']<br>numbers&#xA0;=&#xA0;list(range(4))<br>mi&#xA0;=&#xA0;pd.MultiIndex.from_product([letters,&#xA0;numbers])<br>s&#xA0;=&#xA0;pd.Series(np.random.rand(12),&#xA0;index=mi)<br>s

43.检查s是否是字典顺序排序的

s.index.is_lexsorted()#&#xA0;&#x65B9;&#x6CD5;&#x4E8C;#&#xA0;s.index.lexsort_depth&#xA0;==&#xA0;s.index.nlevels

44.选择二级索引为1, 3的行

s.loc[:,&#xA0;[1,&#xA0;3]]

45.对s进行切片操作,取一级索引从头至B,二级索引从2开始到最后

s.loc[pd.IndexSlice[:'B',&#xA0;2:]]#&#xA0;&#x65B9;&#x6CD5;&#x4E8C;#&#xA0;s.loc[slice(None,&#xA0;'B'),&#xA0;slice(2,&#xA0;None)]

46.计算每个一级索引的和(A, B, C每一个的和)

s.sum(level=0)#&#x65B9;&#x6CD5;&#x4E8C;#s.unstack().sum(axis=0)

47.交换索引等级,新的Series是字典顺序吗?不是的话请排序

new_s&#xA0;=&#xA0;s.swaplevel(0,&#xA0;1)<br>print(new_s)<br>print(new_s.index.is_lexsorted())<br>new_s&#xA0;=&#xA0;new_s.sort_index()<br>print(new_s)

可视化

import&#xA0;matplotlib.pyplot&#xA0;as&#xA0;plt<br>df&#xA0;=&#xA0;pd.DataFrame({"xs":[1,5,2,8,1],&#xA0;"ys":[4,2,1,9,6]})<br>plt.style.use('ggplot')

48.画出df的散点图

df.plot.scatter("xs",&#xA0;"ys",&#xA0;color&#xA0;=&#xA0;"black",&#xA0;marker&#xA0;=&#xA0;"x")

归纳推理测试没做完_Pandas50道练习题,Numpy100道没做完的同学不许点开!

49.可视化指定4维DataFrame

df&#xA0;=&#xA0;pd.DataFrame({"productivity":[5,2,3,1,4,5,6,7,8,3,4,8,9],"hours_in"&#xA0;&#xA0;&#xA0;&#xA0;:[1,9,6,5,3,9,2,9,1,7,4,2,2],"happiness"&#xA0;&#xA0;&#xA0;:[2,1,3,2,3,1,2,3,1,2,2,1,3],"caffienated"&#xA0;:[0,0,1,1,0,0,0,0,1,1,0,1,0]})<br>df.plot.scatter("hours_in",&#xA0;"productivity",&#xA0;s&#xA0;=&#xA0;df.happiness&#xA0;*&#xA0;100,&#xA0;c&#xA0;=&#xA0;df.caffienated)

归纳推理测试没做完_Pandas50道练习题,Numpy100道没做完的同学不许点开!

50.在同一个图中可视化2组数据,共用X轴,但y轴不同

df&#xA0;=&#xA0;pd.DataFrame({"revenue":[57,68,63,71,72,90,80,62,59,51,47,52],"advertising":[2.1,1.9,2.7,3.0,3.6,3.2,2.7,2.4,1.8,1.6,1.3,1.9],"month":range(12)})<br>ax&#xA0;=&#xA0;df.plot.bar("month",&#xA0;"revenue",&#xA0;color&#xA0;=&#xA0;"green")<br>df.plot.line("month",&#xA0;"advertising",&#xA0;secondary_y&#xA0;=&#xA0;True,&#xA0;ax&#xA0;=&#xA0;ax)<br>ax.set_xlim((-1,12));

归纳推理测试没做完_Pandas50道练习题,Numpy100道没做完的同学不许点开!

【往期精彩】

归纳推理测试没做完_Pandas50道练习题,Numpy100道没做完的同学不许点开!

归纳推理测试没做完_Pandas50道练习题,Numpy100道没做完的同学不许点开!

60题带你入门PyTorch,打好基础学什么都容易

归纳推理测试没做完_Pandas50道练习题,Numpy100道没做完的同学不许点开!

Numpy100道练习,你确定全都会吗?

归纳推理测试没做完_Pandas50道练习题,Numpy100道没做完的同学不许点开!

天池大赛

归纳推理测试没做完_Pandas50道练习题,Numpy100道没做完的同学不许点开!

如果你在学习过程中,有看到一些比较
优质的文章或Paper,或者你平时自己学习笔记和原创文章,请投稿到天池

,让更多的人看到。除了精美的
丰富的神秘天池大礼以及粮 票奖励。

分享成功后你也可以通过下方钉钉群?主动联系我们的社区运营同学(钉钉号:

归纳推理测试没做完_Pandas50道练习题,Numpy100道没做完的同学不许点开!

天池宝贝们有任何问题,可在戳”留言”评论或加入钉钉群留言,小天会认真倾听每一个你的建议!

转发、收藏、在看

归纳推理测试没做完_Pandas50道练习题,Numpy100道没做完的同学不许点开!

Original: https://blog.csdn.net/weixin_28797725/article/details/112694242
Author: pk2017
Title: 归纳推理测试没做完_Pandas50道练习题,Numpy100道没做完的同学不许点开!

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/676235/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球