0


3.5.1 pandas基础

1.导入三方库

import numpy as np
import pandas as pd

查看库的版本

pd.__version__
'1.0.5'

2.数据文件的导入和导出

1)xlsx文件

shuju_xlsx = pd.read_excel('table.xlsx')
shuju_xlsx2 = pd.read_excel('可视化图表案例数据.xlsx')
shuju_xlsx4 = pd.read_excel('可视化图表案例数据.xlsx',sheet_name='条形图')

2)csv文件

shuju_csv = pd.read_csv('table.csv')

3)txt文件

shuju_txt = pd.read_table('table.txt')
shuju_txt

.dataframe tbody tr th {
    vertical-align: top;
}
​
.dataframe thead th {
   text-align: right;
}

</style>

col1col2col3col402a1.4apple13b3.4banana26c2.5orange35d3.2lemon

shuju_txt2 = pd.read_table('citydata.txt',sep='\s+')

3.基本数据结构

1)Series常用的属性有:值(values)、索引(index)、名字(name)、类型(dtype)

se = pd.Series(np.random.randint(60,100,(8)),index=['s','e','q','b','a','s','h','t'],name='模拟学生成绩',dtype='int32')

se
s    69
e    96
q    74
b    88
a    66
s    73
h    97
t    64
Name: 模拟学生成绩, dtype: int32
se['e']
96
se['s']
s    69
s    73
Name: 模拟学生成绩, dtype: int32

2)DataFrame

a)创建DataFrame

DF = pd.DataFrame({'字母':list('abcdefgh'),'编号':range(5,13),'分值':[1.3,1,3.6,4.6,18,9.1,11,11.111]},
                  index=list('一二三四五六七八'))

DF

.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}

</style>

字母编号分值一a51.300二b61.000三c73.600四d84.600五e918.000六f109.100七g1111.000八h1211.111

b)从DataFrame中取出一列

DF[['编号','分值']]

.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}

</style>

编号分值一51.300二61.000三73.600四84.600五918.000六109.100七1111.000八1211.111

c)修改行或列名

修改列名

DF.rename(columns={'asd':'字母','shuzi':'编号','带小数点的数据':'分值'})

.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}

</style>

字母编号分值一a51.300二b61.000三c73.600四d84.600五e918.000六f109.100七g1111.000八h1211.111

#1.与直接数据提供人或者数据导出者对接
#2.1)让对方自行内部沟通,等待结果;2)尝试获取或切入对方的数据录入环节

修改行名

DF.rename(index={'一':'numberone'},inplace=True)

DF

.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}

</style>

字母编号分值numberonea51.300二b61.000三c73.600四d84.600五e918.000六f109.100七g1111.000八h1211.111

d)调用属性和方法

DF.values
array([['a', 5, 1.3],
       ['b', 6, 1.0],
       ['c', 7, 3.6],
       ['d', 8, 4.6],
       ['e', 9, 18.0],
       ['f', 10, 9.1],
       ['g', 11, 11.0],
       ['h', 12, 11.111]], dtype=object)
DF.index
Index(['numberone', '二', '三', '四', '五', '六', '七', '八'], dtype='object')
DF.columns
Index(['字母', '编号', '分值'], dtype='object')

e)列的删除和添加

列的删除

DF.drop(index='五',columns='字母') #使用参数inplace=True才会在DataFrame中生效

.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}

</style>

编号分值numberone51.300二61.000三73.600四84.600六109.100七1111.000八1211.111

del DF['字母'] #执行后改动就会生效
DF

.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}

</style>

编号分值numberone51.300二61.000三73.600四84.600五918.000六109.100七1111.000八1211.111

列的添加

DF

.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}

</style>

编号分值numberone51.300二61.000三73.600四84.600五918.000六109.100七1111.000八1211.111

DF['添加的列'] = DF['编号'] + DF['分值']
DF

.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}

</style>

编号分值添加的列numberone51.3006.300二61.0007.000三73.60010.600四84.60012.600五918.00027.000六109.10019.100七1111.00022.000八1211.11123.111

f)根据类型选择列

DF.select_dtypes(include=['number'])

.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}

</style>

编号分值添加的列numberone51.3006.300二61.0007.000三73.60010.600四84.60012.600五918.00027.000六109.10019.100七1111.00022.000八1211.11123.111

DF.select_dtypes(include=['object'])

.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}

</style>

numberone二三四五六七八

4.常用基本函数

导入数据文件

csv_shuju = pd.read_csv('table.csv')

a)head和tail

csv_shuju.head()

.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}

</style>

SchoolClassIDGenderAddressHeightWeightMathPhysics0S_1C_11101Mstreet_11736334.0A+1S_1C_11102Fstreet_21927332.5B+2S_1C_11103Mstreet_21868287.2B+3S_1C_11104Fstreet_21678180.4B-4S_1C_11105Fstreet_41596484.8B+

csv_shuju.rename(columns={'School':'学校','Class':'班级','ID':'学生ID','Gender':'性别',
                          'Address':'地址','Height':'身高','Weight':'体重','Math':'数学成绩','Physics':'物理成绩'},inplace=True)
csv_shuju.head(1) #默认显示5行

.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}

</style>

学校班级学生ID性别地址身高体重数学成绩物理成绩0S_1C_11101Mstreet_11736334.0A+

csv_shuju.tail(2) #默认显示5行

.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}

</style>

学校班级学生ID性别地址身高体重数学成绩物理成绩33S_2C_42404Fstreet_21608467.7B34S_2C_42405Fstreet_61935447.6B

b)unique和nunique

csv_shuju['性别'].nunique() #nunique显示该字段里有多少个唯一值
2
csv_shuju['性别'].unique() #unique显示该字段里所有的唯一值
array(['M', 'F'], dtype=object)

c)count和value_counts

csv_shuju['地址'].count() #返回非缺失值元素的个数
35
csv_shuju['物理成绩'].value_counts() #返回每个元素的频数(有多少个)
#不太适合交易额、销量、分值
B+    9
B     8
B-    6
A     4
A-    3
A+    3
C     2
Name: 物理成绩, dtype: int64

d)info和describe

csv_shuju.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 35 entries, 0 to 34
Data columns (total 9 columns):
 #   Column  Non-Null Count  Dtype  
---  ------  --------------  -----  
 0   学校      35 non-null     object 
 1   班级      35 non-null     object 
 2   学生ID    35 non-null     int64  
 3   性别      35 non-null     object 
 4   地址      35 non-null     object 
 5   身高      35 non-null     int64  
 6   体重      35 non-null     int64  
 7   数学成绩    35 non-null     float64
 8   物理成绩    35 non-null     object 
dtypes: float64(1), int64(3), object(5)
memory usage: 2.6+ KB
csv_shuju.describe() #统计数值型数据的各个统计量

.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}

</style>

学生ID身高体重数学成绩count35.0000035.00000035.00000035.000000mean1803.00000174.14285774.65714361.351429std536.8774113.54109812.89537719.915164min1101.00000155.00000053.00000031.50000025%1204.50000161.00000063.00000047.40000050%2103.00000173.00000074.00000061.70000075%2301.50000187.50000082.00000077.100000max2405.00000195.000000100.00000097.000000

csv_shuju.describe(percentiles=[.05,.25,.75,.95])

.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}

</style>

学生ID身高体重数学成绩count35.0000035.00000035.00000035.000000mean1803.00000174.14285774.65714361.351429std536.8774113.54109812.89537719.915164min1101.00000155.00000053.00000031.5000005%1102.70000157.00000056.10000032.64000025%1204.50000161.00000063.00000047.40000050%2103.00000173.00000074.00000061.70000075%2301.50000187.50000082.00000077.10000095%2403.30000193.30000097.60000090.040000max2405.00000195.000000100.00000097.000000

csv_shuju['物理成绩'].describe()
count     35
unique     7
top       B+
freq       9
Name: 物理成绩, dtype: object

e)idxmax和nlargest

idxmax

csv_shuju['数学成绩'].idxmax() #返回最大值所在行的索引
5
csv_shuju[5:9]

.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}

</style>

学校班级学生ID性别地址身高体重数学成绩物理成绩5S_1C_21201Mstreet_51886897.0A-6S_1C_21202Fstreet_41769463.5B-7S_1C_21203Mstreet_61605358.8A+8S_1C_21204Fstreet_51626333.8B

csv_shuju['数学成绩'].idxmin() #返回最小值所在行的索引
10
csv_shuju[10:20]

.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}

</style>

学校班级学生ID性别地址身高体重数学成绩物理成绩10S_1C_31301Mstreet_41616831.5B+11S_1C_31302Fstreet_11755787.7A-12S_1C_31303Mstreet_71888249.7B13S_1C_31304Mstreet_21957085.2A14S_1C_31305Fstreet_51876961.7B-15S_2C_12101Mstreet_71748483.3C16S_2C_12102Fstreet_61616150.6B+17S_2C_12103Mstreet_41576152.5B-18S_2C_12104Fstreet_51599772.2B+19S_2C_12105Mstreet_41708134.2A

nlargest

csv_shuju['数学成绩'].nlargest() #返回前几个大的元素值及其索引
5     97.0
28    95.5
11    87.7
2     87.2
24    85.4
Name: 数学成绩, dtype: float64
csv_shuju['数学成绩'].nsmallest() #返回前几个小的元素值及其索引
10    31.5
1     32.5
26    32.7
8     33.8
0     34.0
Name: 数学成绩, dtype: float64

e)clip和replace

clip:对超过或低于指定值的数据进行截取

csv_shuju['数学成绩'].clip(31,50).head()
0    34.0
1    32.5
2    50.0
3    50.0
4    50.0
Name: 数学成绩, dtype: float64

replace:对指定值进行替换

csv_shuju['地址'].replace(['street_1','street_2','street_4'],['one','two','fouth'],inplace=True)
csv_shuju.head(10)

.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}

</style>

学校班级学生ID性别地址身高体重数学成绩物理成绩0S_1C_11101Mone1736334.0A+1S_1C_11102Ftwo1927332.5B+2S_1C_11103Mtwo1868287.2B+3S_1C_11104Ftwo1678180.4B-4S_1C_11105Ffouth1596484.8B+5S_1C_21201Mstreet_51886897.0A-6S_1C_21202Ffouth1769463.5B-7S_1C_21203Mstreet_61605358.8A+8S_1C_21204Fstreet_51626333.8B9S_1C_21205Fstreet_61676368.4B-

标签: 可视化 python java

本文转载自: https://blog.csdn.net/weixin_45944896/article/details/118925848
版权归原作者 小石小石摩西摩西 所有, 如有侵权,请联系我们删除。

“3.5.1 pandas基础”的评论:

还没有评论
关于作者
...
overfit同步小助手
文章同步
文章导航