基于Anaconda的pandas学习

基于Anaconda的pandas学习

*
Pandas安装
创建对象

+ 创建Series对象
+ 创建DataFrame对象
+ 创建date_range
查看数据
获取数据

+ 直接获取
+ 索引获取
增删改数据

+ 索引及缺失值操作
运算
字符串操作

Pandas安装

第一步:找到开始桌面下的anaconda下面的anaconda prompt!

基于Anaconda的pandas学习
第二步:输入如下命令,如果提示你更新,那就去更新。
conda install pandas

基于Anaconda的pandas学习

创建对象

创建Series对象

import pandas as pd
pandas基于numpy 故需要导入numpy
import numpy as np
创建series对象 np.nan=not a number 默认索引从0开始
s1=pd.Series([10,20,30,40,np.nan])
print(s1)

基于Anaconda的pandas学习
查看相关数据:

基于Anaconda的pandas学习
当然也可以自己指定索引!在Series函数中传入参数index=list(‘abcde’)试试!
基于Anaconda的pandas学习
基于Anaconda的pandas学习

创建DataFrame对象

方法一:传入数据

series是一维 dataframe是二维
df1=pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]])
print(df1)

基于Anaconda的pandas学习
基于Anaconda的pandas学习
方法二:传入数据和参数
series是一维 dataframe是二维
df1=pd.DataFrame([[1,2,3],[4,5,6],[7,8,9]],index=list('abc'),columns=list('ABC'))
print(df1)

基于Anaconda的pandas学习
基于Anaconda的pandas学习
方法三:用字典方式创建(其为列索引奥)
series是一维 dataframe是二维
df1=pd.DataFrame({'a':[1,2,3],'b':[2,4,6],'c':[3,6,9]})
print(df1)

基于Anaconda的pandas学习
基于Anaconda的pandas学习

如果想要改变行索引,则传入相应参数即可!

series是一维 dataframe是二维
df1=pd.DataFrame({'a':[1,2,3],'b':[2,4,6],'c':[3,6,9]},index=list('ABC'))
print(df1)

基于Anaconda的pandas学习
基于Anaconda的pandas学习

创建date_range

创建date_range索引 必须指定start end periods的两个参数值 否则报错
df2=pd.date_range('20220101',periods=12)
print(df2)

基于Anaconda的pandas学习
加入频率:D表示天 M表示月
创建date_range索引 必须指定start end periods的两个参数值 否则报错
df2=pd.date_range('20220101',periods=12,freq='3D')
print(df2)

基于Anaconda的pandas学习

查看数据

df3=pd.DataFrame(np.random.randint(1,20,(12,5)),index=df2,columns=['小白菜','竹笋','鱼籽烧','紫薯球','鸡翅'])
如果直接print可能对不齐 这里使用display自带表格
display(df3)

基于Anaconda的pandas学习
如果数据太多,查看相关数据的方法!
查看头部数据 默认5条
df3.head()

基于Anaconda的pandas学习
查看尾部的数据 默认5条 可以传递参数
df3.tail(3)

基于Anaconda的pandas学习
显示统计摘要
df3.describe()

基于Anaconda的pandas学习
插入数据 第一个参数是插入的列索引
df3.insert(len(df3.columns),'测试',list('abcdefghijkl'))

基于Anaconda的pandas学习
索引排序:
sort_index(axis=0, ascending=True, inplace=False, by=None)
axis:0按照行索引排序;1按照列索引排序
ascending:默认True升序排列;False降序排列
inplace:默认False,否则排序之后的数据直接替换原来的数据集
by:按照某一列或几列数据进行排序,但是by参数官方不建议使用
案例:
df5 = pd.DataFrame({'b': [1, 2, 2, 3], 'a': [4, 3, 2, 1], 'c': [1, 3, 8, 2]}, index=[2, 0, 1, 3])
print(df5)
print('* ' * 30)
df6 = df5.sort_index()
默认axis=0, 行变列不变, 默认根据行索引升序
print(df6)

基于Anaconda的pandas学习
值排序:
DataFrame.sort_values(by, axis=0, ascending=True, inplace=False)
by参数:如果axis=0,by="列名"。如果axis=1,那么by="行名"。如果行或列的名称类型是数字则 by=数字
案例:
df7 = df5.sort_values(by='c')
默认:ascending=True, axis=0
print(df5)
print('-'*20)
df7 = df5.sort_values(by=2, axis=1)
print(df7)

基于Anaconda的pandas学习

获取数据

直接获取

我们比较推荐最优化的pandas对数据进行处理,而不是python或者numpy。

例如.at, .iat, .loc, .iloc and .ix。

首先构造数据!

import pandas as pd
import numpy as np
构造Dataframe对象
arr = np.random.uniform(50, 101, (10, 5))
names = ['曹操', '刘备', '孙权', '陆逊', '张昭', '诸葛亮', '关羽', '赵云', '吕布', '典 韦']
courses = ['语文', '数学', '英语', '政治', 'Python']
df = pd.DataFrame(arr, index=names, columns=courses)
查看前五行数据
head_5 = df.head(5)
display(head_5)
查看基本信息
df.info()

基于Anaconda的pandas学习
获取列数据:
查看df中某一列的数据
lang = df.语文
等同于df['语文']
print(type(lang))
<class 'pandas.core.series.series'>
print(lang)
&#x53EF;&#x4EE5;&#x901A;&#x8FC7;df[['&#x8BED;&#x6587;', '&#x6570;&#x5B66;']]&#x67E5;&#x770B;&#x591A;&#x5217;&#x6570;&#x636E;
</class>

基于Anaconda的pandas学习
获取行数据(切片):
&#x67E5;&#x770B;&#x4E00;&#x884C;&#x6216;&#x8005;&#x8FDE;&#x7EED;&#x591A;&#x884C;&#x6570;&#x636E; &#x5207;&#x7247;&#x5DE6;&#x5305;&#x542B;&#x53F3;&#x4E0D;&#x5305;&#x542B;
line = df[0: 1]
print(line)
print('*' * 30)
lines = df[1:3]
print(lines)

基于Anaconda的pandas学习
同时获取行列:
&#x540C;&#x65F6;&#x83B7;&#x53D6;&#x884C;&#x548C;&#x5217;
rows_cols = df[0:2][['&#x8BED;&#x6587;', '&#x6570;&#x5B66;', '&#x82F1;&#x8BED;']]
print(rows_cols)

基于Anaconda的pandas学习

索引获取

loc名称索引:使用索引名称作为参数来获取数据,有两个输入参数:
第一个参数指定行名,第二个指定列名。当只有一个参数时,默认是行名(即抽取整行),所有列都选中。(包含最后一个的)

行和列均是既可以用切片,又可以用列表(数组)。

1. df.loc[&#x53C2;&#x6570;]&#x83B7;&#x53D6;&#x4E00;&#x884C;,&#x53C2;&#x6570;&#x662F;index&#x6216;&#x8005;column&#x7684;&#x540D;&#x79F0;
line = df.loc['&#x66F9;&#x64CD;']
print(type(line)) # <class 'pandas.core.series.series'> print(line)
1.1 df.loc[&#x53C2;&#x6570;]&#x83B7;&#x53D6;&#x591A;&#x884C;
lines = df.loc[['&#x66F9;&#x64CD;', '&#x5415;&#x5E03;']]
print(lines)
1.2 df.loc[&#x53C2;&#x6570;]&#x83B7;&#x53D6;&#x591A;&#x5217;,&#x6240;&#x6709;&#x884C;&#x7684;&#x6570;&#x636E;
lines = df.loc[:, ['&#x8BED;&#x6587;', '&#x82F1;&#x8BED;']]
print(lines)
1.3 df.loc[&#x53C2;&#x6570;]&#x83B7;&#x53D6;&#x591A;&#x5217;,&#x591A;&#x884C;&#x7684;&#x6570;&#x636E;
lines = df.loc['&#x66F9;&#x64CD;': '&#x5173;&#x7FBD;', '&#x6570;&#x5B66;': '&#x653F;&#x6CBB;': 2]
print(lines)
loc&#x7684;&#x5207;&#x7247;&#x64CD;&#x4F5C;, &#x5305;&#x542B;&#x7ED3;&#x675F;
1.4 df.loc[&#x53C2;&#x6570;]&#x83B7;&#x53D6;&#x591A;&#x5217;,&#x6240;&#x6709;&#x884C;&#x7684;&#x6570;&#x636E;
lines = df.loc['&#x66F9;&#x64CD;': '&#x5173;&#x7FBD;', ::2]
print(lines)
</class>

基于Anaconda的pandas学习
iloc位置索引:使用位置索引(注意区分前面的名称索引)来获取!

iloc的切片操作, 不包含结束!!(试一下就知道啦!

2.df.iloc[&#x53C2;&#x6570;]&#x83B7;&#x53D6;&#x4E00;&#x884C;,&#x53C2;&#x6570;&#x662F;&#x884C;&#x6216;&#x5217;&#x7D22;&#x5F15;&#x7684;&#x5E8F;&#x53F7;(&#x6570;&#x5B57;)
line = df.iloc[0]
display(line)
2.1 df.iloc[&#x53C2;&#x6570;]&#x83B7;&#x53D6;&#x591A;&#x884C;
lines = df.iloc[[0, -2]]
display(lines)
2.2 df.iloc[&#x53C2;&#x6570;]&#x83B7;&#x53D6;&#x591A;&#x5217;,&#x6240;&#x6709;&#x884C;&#x7684;&#x6570;&#x636E;
lines = df.iloc[:, [0, 2]]
display(lines)
2.3 df.iloc[&#x53C2;&#x6570;]&#x83B7;&#x53D6;&#x591A;&#x5217;,&#x6240;&#x6709;&#x884C;&#x7684;&#x6570;&#x636E;
lines = df.iloc[0: -3, 1: -1: 2]
display(lines)
iloc&#x7684;&#x5207;&#x7247;&#x64CD;&#x4F5C;, &#x4E0D;&#x5305;&#x542B;&#x7ED3;&#x675F;

基于Anaconda的pandas学习
布尔索引
&#x4E00;&#x4E2A;&#x6761;&#x4EF6;
bools = df['Python'] > 70
print(bools)
df2 = df[bools]
&#x5E03;&#x5C14;&#x7D22;&#x5F15;
print(df2)
df2 = df.loc[bools]
print(df2)
&#x591A;&#x4E2A;&#x6761;&#x4EF6;
bools2 = (df['Python'] > 70) & (df['Python'] <= 85) bools2="(df['Python']"> 70) & (df['&#x653F;&#x6CBB;'] > 70)
print(bools2)
print(df[bools2])
&#x6EE1;&#x8DB3;&#x6761;&#x4EF6;&#x540E;&#x8D4B;&#x503C;
df.loc[df['Python'] > 70, 'Python'] = 85
print(df)
&#x8FC7;&#x6EE4;&#x6570;&#x636E; # &#x5224;&#x65AD;Python&#x5217;&#x7684;&#x503C;&#x662F;&#x5426;&#x5305;&#x542B;[50, 51, 52]&#x4E2D;&#x4EFB;&#x610F;&#x4E00;&#x4E2A;
bools3 = df['Python'].isin([50, 51, 52])
print(bools3)
df2 = df.loc[bools3]
print(df2)
</=>

基于Anaconda的pandas学习

增删改数据

由于不断增删改,为了避免自己忘记了,可以动态获取行列索引值!

&#x63D2;&#x5165;&#x4E00;&#x5217;, &#x53EF;&#x4EE5;&#x4F7F;arr, list, Series&#x7B49;&#x3002;
arr = np.random.randint(50, 100, (10,))
&#x5217;&#x7684;&#x7D22;&#x5F15;&#x4F4D;&#x7F6E;&#xFF1A;len(df.columns), &#x5217;&#x540D;&#x79F0;&#xFF1A;'Java', &#x5217;&#x503C;&#xFF1A;arr
df.insert(len(df.columns), 'Java', arr)
&#x529F;&#x80FD;&#x540C;&#x4E0B;
df['Java'] = arr
&#x63D2;&#x5165;&#x4E00;&#x884C;
df3 = pd.DataFrame(np.random.randint(50, 100, (1, 6)), columns=df.columns, index=['&#x5F20;&#x98DE;'])
print(df3)
print('--' * 30)
df2 = df.append(df3)
print(df2)
&#x5220;&#x9664;&#x6307;&#x5B9A;&#x7684;&#x5217;
df3 = df.drop('&#x8BED;&#x6587;', axis=1)
&#x5220;&#x9664;&#x5217;('&#x8BED;&#x6587;')&#x7684;&#x65F6;&#x5019;&#x9700;&#x8BBE;&#x7F6E;axis=1
df3 = df.drop(['Java', '&#x8BED;&#x6587;'], axis=1)
&#x5220;&#x9664;&#x591A;&#x5217;
print(df3)
&#x5220;&#x9664;&#x6307;&#x5B9A;&#x7684;&#x884C;
df3 = df3.drop('&#x66F9;&#x64CD;', axis=0)
&#x5220;&#x9664;&#x884C;&#x7684;&#x65F6;&#x5019;&#x9700;&#x8BBE;&#x7F6E;axis=0
print(df3)

基于Anaconda的pandas学习

索引及缺失值操作

reindex()方法用于创建一个符合新索引的新对象!

&#x5BF9;&#x4E8E;Series&#x7C7B;&#x578B;&#xFF0C;&#x8C03;&#x7528;reindex()&#x4F1A;&#x5C06;&#x6570;&#x636E;&#x6309;&#x7167;&#x65B0;&#x7684;&#x7D22;&#x5F15;&#x8FDB;&#x884C;&#x6392;&#x5217;,&#x5982;&#x679C;&#x67D0;&#x4E2A;&#x7D22;&#x5F15;&#x503C;&#x4E4B;&#x524D;&#x4E0D;&#x5B58;&#x5728;&#xFF0C; &#x5219;&#x5F15;&#x5165;&#x7F3A;&#x5931;&#x503C;
s1=pd.Series([1,7,3,9],index=['d','c','a','f'])
print(s1)
s2=s1.reindex(['a','b','c','d','e','f'])
print(s2)

基于Anaconda的pandas学习
&#x5BF9;&#x4E8E;DataFrame&#x4E2D;&#xFF0C;reindex()&#x53EF;&#x4EE5;&#x6539;&#x53D8;&#x884C;&#x7D22;&#x5F15;&#x548C;&#x5217;&#x7D22;&#x5F15;
df = pd.DataFrame(np.arange(9).reshape((3, 3)), index=['a', 'c', 'd'], columns=['Ohio', 'Texas', 'California'])
print(df)
&#x9ED8;&#x8BA4;&#x91CD;&#x5EFA;&#x884C;&#x7D22;&#x5F15;
df2 = df.reindex(['a', 'b', 'c', 'd'])
print(df2)
&#x53EF;&#x4EE5;&#x4F7F;&#x7528;columns&#x5173;&#x952E;&#x5B57;&#x91CD;&#x5EFA;&#x5217;&#x7D22;&#x5F15;
states = ['Texas', 'Utah', 'California']
df2.reindex(columns=states)

基于Anaconda的pandas学习
set_index()可以设置单索引和复合索引,调用这个函数会生成一个新的DataFrame, 新的df使用一个列或多个列作为索引。
df3=pd.DataFrame([['BAR','ONE','Z',1],['BAR','TWO','Y',2],['FOO','ONE','X',3],['FOO','TWO','W',3]],columns=list('abcd'))
display(df3)
c&#x8FD9;&#x4E00;&#x5217;&#x4F5C;&#x4E3A;&#x7D22;&#x5F15; &#x5982;&#x679C;&#x4E0D;&#x60F3;&#x539F;&#x6765;&#x7684;c&#x5220;&#x9664; &#x5219;&#x6DFB;&#x52A0;drop&#x53C2;&#x6570;
df4=df3.set_index('c',drop=False)
display(df4)

基于Anaconda的pandas学习
&#x8BBE;&#x7F6E;&#x591A;&#x5217;&#x7D22;&#x5F15;
df4 = df3.set_index(['a', 'b'])
print(df4)

基于Anaconda的pandas学习
reset_index(),它是set_index()的反操作,调用它分层索引的索引层级会被还原到列中。
df4.reset_index()

基于Anaconda的pandas学习
缺失值处理:缺失值占整体不太多,可以直接删除,如果很多,那就需要填充!
df = pd.DataFrame(np.arange(9).reshape((3, 3)), index=['a', 'c', 'd'], columns=['Ohio', 'Texas', 'California'])
df.iloc[-1] = np.nan
print(df)

基于Anaconda的pandas学习
注意在numpy和pandas中axis规则不同!
&#x5220;&#x9664;nan  axis=0&#x662F;&#x5220;&#x9664;&#x884C; axis=1&#x662F;&#x5220;&#x9664;&#x5217;
df4 = df.dropna(axis=0, how='all') # any:&#x5305;&#x542B;&#x4E00;&#x4E2A;nan&#x5C31;&#x5220;&#x9664;&#x4E86;&#xFF0C;all&#x662F;&#x6240;&#x6709;&#x503C;&#x90FD;&#x662F;nan&#x624D;&#x5220;&#x9664;
display(df4)

基于Anaconda的pandas学习
&#x586B;&#x5145;nan &#x4E00;&#x822C;&#x586B;&#x5145;&#x4E0D;&#x662F;&#x968F;&#x4FBF;&#x586B;&#x5145; &#x8FD9;&#x91CC;&#x4EC5;&#x4F5C;&#x6F14;&#x793A;
df.fillna(10, inplace=True) # inplace=True&#x76F4;&#x63A5;&#x4FEE;&#x6539;df3&#x7684;&#x503C;

基于Anaconda的pandas学习

运算

运算,一般不包括缺失值奥!

基于Anaconda的pandas学习
value_counts非常重要!
&#x6784;&#x9020;Dataframe&#x5BF9;&#x8C61;
arr = np.random.randint(50, 101, (10, 5))
names = ['&#x66F9;&#x64CD;', '&#x5218;&#x5907;', '&#x5B59;&#x6743;', '&#x9646;&#x900A;', '&#x5F20;&#x662D;', '&#x8BF8;&#x845B;&#x4EAE;', '&#x5173;&#x7FBD;', '&#x8D75;&#x4E91;', '&#x5415;&#x5E03;', '&#x5178; &#x97E6;']
courses = ['&#x8BED;&#x6587;', '&#x6570;&#x5B66;', '&#x82F1;&#x8BED;', '&#x653F;&#x6CBB;', 'Python']
df = pd.DataFrame(arr, index=names, columns=courses)
df.iloc[1, 3] = np.nan
df.iloc[2, 2] = np.nan
df.iloc[6, 4] = np.nan
print(df)
1.6 value_counts&#xFF1A;&#x6C42;&#x4E00;&#x7EC4;&#x6570;&#x636E;&#x4E2D;&#x6BCF;&#x4E2A;&#x503C;&#x51FA;&#x73B0;&#x7684;&#x6B21;&#x6570;&#xFF0C;&#x7528;&#x4E8E;&#x4E00;&#x884C;&#x6216;&#x4E00;&#x5217;&#x6570;&#x636E;&#x5373;Series
1.6.1 &#x6784;&#x5EFA;&#x5E73;&#x5747;&#x5206;&#x5217;&#x548C;&#x8BC4;&#x7EA7;&#x5217;:&#x4F18;&#x79C0;&#x3001;&#x826F;&#x597D;&#x3001;&#x53CA;&#x683C;&#x3001;&#x4E0D;&#x53CA;&#x683C;
level = df.mean(axis=1)
&#x5BF9;&#x539F;&#x6709;&#x6570;&#x636E;&#x590D;&#x5236;&#x4E00;&#x4EFD;
level_ = level.copy()
level_[(level >= 85) & (level <= 100)]="&#x4F18;&#x79C0;" level_[(level>= 75) & (level < 85)] = '&#x826F;&#x597D;'
level_[(level >= 60) & (level < 75)] = '&#x53CA;&#x683C;'
level_[(level >= 0) & (level < 60)] = '&#x4E0D;&#x53CA;&#x683C;'
&#x6DFB;&#x52A0;&#x5E73;&#x5747;&#x5206;&#x5217;&#x548C;&#x8BC4;&#x7EA7;&#x5217;
df['&#x5E73;&#x5747;&#x5206;'] = df.mean(axis=1)
print(df)
df['&#x8BC4;&#x7EA7;'] = level_
print(level_)
print(df)
</=>
1.6.2 &#x7EDF;&#x8BA1;level&#x4E2D;&#x5404;&#x7EA7;&#x522B;&#x51FA;&#x73B0;&#x7684;&#x6B21;&#x6570;
sort=True&#x6392;&#x5E8F;&#xFF0C;ascending=True&#x5347;&#x5E8F;
series = df['&#x8BC4;&#x7EA7;'].value_counts(sort=True, ascending=True)
print(series)

基于Anaconda的pandas学习

字符串操作

df = pd.DataFrame({'movie_names': [' &#x590D;&#x4EC7;&#x8005;&#x8054;&#x76DF;4&#xFF1A;&#x7EC8;&#x5C40;&#x4E4B;&#x6218; \n\r', '\n\r&#x963F;&#x51E1;&#x8FBE; Avatar', '&#x6CF0;&#x5766;&#x5C3C;&#x514B;&#x53F7; Titanic '], 'director': ['&#x5BFC;&#x6F14;: &#x5B89;&#x4E1C;&#x5C3C;&#xB7;&#x7F57;&#x7D20; / &#x4E54;&#xB7;&#x7F57;&#x7D20;', '&#x8A79;&#x59C6;&#x65AF;&#xB7;&#x5361;&#x6885;&#x9686;', '&#x8A79;&#x59C6; &#x65AF;&#xB7;&#x5361;&#x6885;&#x9686;'], 'actor': ['&#x5C0F;&#x7F57;&#x4F2F;&#x7279;&#xB7;&#x5510;&#x5C3C; / &#x514B;&#x91CC;&#x65AF;&#xB7;&#x57C3;&#x6587;&#x65AF; / &#x9A6C;&#x514B;&#xB7;&#x9C81;&#x5F17;&#x6D1B;', '&#x8428;&#x59C6;&#xB7;&#x6C83;&#x8F9B; &#x987F; / &#x4F50;&#x4F0A;&#xB7;&#x7D22;&#x5C14;&#x8FBE;&#x5A1C; / &#x897F;&#x683C;&#x59AE;&#xB7;&#x97E6;&#x5F17;', '&#x83B1;&#x6602;&#x7EB3;&#x591A;&#xB7;&#x8FEA;&#x5361;&#x666E;&#x91CC;&#x5965; / &#x51EF;&#x7279;&#xB7;&#x6E29;&#x4E1D;&#x83B1;&#x7279; / &#x6BD4;&#x5229;&#xB7;&#x8D5E;&#x6069;'], 'type': ['&#x5267;&#x60C5; / &#x52A8;&#x4F5C; / &#x79D1;&#x5E7B; / &#x5947;&#x5E7B; / &#x5192;&#x9669;', '&#x52A8;&#x4F5C; / &#x79D1;&#x5E7B; / &#x5192;&#x9669;', '&#x5267;&#x60C5; / &#x7231;&#x60C5; / &#x707E;&#x96BE;']})
display(df)
print('*' * 40)

基于Anaconda的pandas学习
1. replace&#x66FF;&#x6362;&#x5B57;&#x7B26;&#x4E32;
s = df['movie_names'].str.replace(r'\s+', '', regex=True)
r'\s+'&#x662F;&#x5426;&#x4E3A;&#x6B63;&#x5219;&#x8868;&#x8FBE;&#x5F0F;
df['movie_names'] = s
display(df)

基于Anaconda的pandas学习
2. split&#x62C6;&#x5206;&#x5B57;&#x7B26;&#x4E32;
s = df['type'].str.split('/')
display(s)

基于Anaconda的pandas学习
小测试:统计上述各类型出现次数!
types=[j for i in list(s) for j in i]
pd.Series(types).value_counts()

基于Anaconda的pandas学习

Original: https://blog.csdn.net/qq_43779149/article/details/122586367
Author: 雾里看花花里看雾
Title: 基于Anaconda的pandas学习

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

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

(0)

大家都在看

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