IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 【星海随笔】pandas全总结 -> 正文阅读

[人工智能]【星海随笔】pandas全总结

import pandas as pd

pandas总结

载入CSV文件,并展示

df = pd.read_csv('1ttdata.csv')
df

展示元数据

df.info()  #展示初始化后的很多基本信息,包括下面举例的几个
type(df)   #展示类型
df.index   #展示RangeIndex start=xxx, stop=xxx
#pandas.core.frame.DataFrame

支持的读取方式

df.head()
df.tail()
#默认是5条,可以指定
df.values[0] 
#展示指定行的内容
df.keys()
#展示有哪些key
df['XXXkey']
df['Age'].head(10)[:5]
#显示某一列,支持函数head等,也支持列表切割[:5]
dg = df.set_index('Name')
#设置索引为那一列,或者自定义

#通过一个volume或者index

dg = df.set_index('Name')
test1 = dg['age']
test1['Braund, Mr. Owen Harris']
#可以通过名字获取年龄了
test1.mean()
#获取平均值
test1.min()
#获取最小值
test1.max()
#获取最大值

自定义DataFrame

data = {'country':['aaa','bbb','ccc'],
        'population':[10,12,14]}
df_data = pd.DataFrame(data)
df_data
df_date.describe()
#获得数据的统计,所有数字的列,都会进行计算平均值,最大值,最小值,标准差,方差等

显示图表的5行,并展示2到3列

df.iloc[:5,1:3]

设置Name列为索引

df = df.set_index('Name')
df.loc['Cumings, Mrs. John Bradley (Florence Briggs Thayer)']
#根据这个名字去查找全信息
df.loc['Cumings, Mrs. John Bradley (Florence Briggs Thayer)','Age']
#拿出具体的值

根据索引拿出部分

df.loc['Cumings, Mrs. John Bradley (Florence Briggs Thayer)':'Allen, Mr. William Henry']
#打印出从A名称到B名称的值
df.loc['Heikkinen, Miss. Laina','Age'] = 50
#对值赋值
df['Age'] > 30
#年龄大于 30 的
df.loc[df['Sex'] == 'male' ,'Age'].mean()
#查看平均值
df.iloc[1]
#查看第二行的数据
t1.loc[1,'Age'] = 50
#第二行的数据修改
t1 = df.copy()
#深度 拷贝

打印出名称和年龄

df = pd.DataFrame({'name':['A','B','C','A','A','B'],
                  'age':[8,7,9,6,5,4]})
for name in ['A','B','C']:
    print(name,df[df['name'] == name])  #还可以.sum 或者 .mean

根据性别分类分别去求年龄的平均值

df.groupby('Sex')['Age'].mean()

自定义数组

df = pd.DataFrame([[1,2,3],[4,5,6]],index = ['a','b'],columns = ['A','B','C'])
#横坐标为a和b,竖坐标为A B C
df.sum()
#按列求和
df.sum( axis = 1 )
#按行求和
df.sum(axis = 'columns')
#按定义的key值求和
df['Age'].value_counts()
#求协方差
df.cov()
#求相关系数
df.corr()
#降序查看所有年龄的数量
df['Age'].value_counts()
#以升序进行排序
df['Age'].value_counts(ascending = True)
#默认分成5组进行统计
df['Age'].value_counts(ascending = True, bins=5)
#总的计数,None的不计入
df['Age'].count()
#增加一行值,并增加列的key
s1 = df.append(s2,ignore_index=True)
#删除一个key,DataFrame结构,单线条的话就是删除k的索引的所有
del s1['k']
#删除一个索引在的所有数据并输出
s1.drop(891)
#删除一个索引并保存
s1.drop(2,inplace = True)
#DateFrame结构有index的情况下,想用数字去调取某一行,需要用iloc去做一下
df.iloc[0]
#用设置的index访问则用loc
df.loc['a']

改操作

df.loc['a']['A'] = 150
#注意,小a是index,大A是columns

进行拼接

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

增加列,也可以,axis=1 去拼接

df['test'] = [xxx,xxx,xxx,...]
#dataF删除列
del df['Age']
#dataF删除行
df3.drop('h',axis=0,inplace = True)
#删除多列
df3.drop(['Age','Cabin'],axis=1)  #inplace不写默认为False,只输出,不更改原值

构造一个多维表

left = pd.DataFrame({'key':['KO','K1','K3'],
                   'A':['A1','A2','A3'],
                   'B':['B1','B2','B3']})
right = pd.DataFrame({'key':['KO','K1','K3'],
                   'C':['C1','C2','C3'],
                   'D':['D1','D2','D3']})

pd.merge(left,right)
#将两个表合起来
#要求有共同的Key下值一致
pd.merge(left,right,on='key')
#以key为主键进行合并,如果有key2当作是不同的东西
#例如
'''
key	A	B	key2_x	C	D	key2_y
0	KO	A1	B1	K0	C1	D1	K0
1	K1	A2	B2	K2	C2	D2	K2
2	K3	A3	B3	K3	C3	D3	K3
'''
pd.merge(left,right,on=['key','key2'])
#也可以多key作为key,这样就没有重复的列了

特殊情况

left = pd.DataFrame({'key':['KO','K1','K3'],
                   'A':['A1','A2','A3'],
                   'B':['B1','B2','B3'],
                    'key2':['K0','K2','K3']})
right = pd.DataFrame({'key':['KO','K1','K3'],
                   'C':['C1','C2','C3'],
                   'D':['D1','D2','D3'],
                     'key2':['K0','K2','K4']})
                 
#有key2有不一致的地方
pd.merge(left,right,on=['key','key2'])
#如果key加入了key2,那么key2有key没有 ,或者key有key2没有的,就不显示
pd.merge(left,right,on=['key','key2'],how='outer')
#增加outer,增加了外键。不一样的地方会补全 none  并输出
#how 还可以添加,left 或者 right ,来确定是以坐标为基准,还是右表为基准
'''
key	A	B	key2	C	D
0	KO	A1	B1	K0	C1	D1
1	K1	A2	B2	K2	C2	D2
2	K3	A3	B3	K3	NaN	NaN
3	K3	NaN	NaN	K4	C3	D3
'''
pd.merge(left,right,on=['key','key2'],how='outer',indicator = True)
#加一个参数,显示这一行是 所有表中都有 还是某个表独有
pd.set_option('display.max_rows',100)
#设置输出的最多都少行
pd.Series(index = range(0,100) )
#生成一个100行的NaN数据
pd.set_option('display.max_columns',30)
#设置最多打印多少列
a = pd.DataFrame(columns = range(0,40))
#生成0-40个列
pd.get_option('display.max_colwidth')
#显示最多显示多宽
pd.Series(index = ['A'],data=['t'* 60])
#写一个数据测试一下
pd.get_option('display.precision')
#显示小数点后最多多少位
pd.set_option('display.precision',10)
#设置小数点后显示多少位

数据透视表

a.pivot(index = 'A',columns = 'C',values = 'D')
#对一个表,以 C 列为组分类,再分出A 为 index , 计算 D 的总和。
#例如 C 为每个月的tag
#A 为每项支出的类型
#D 为花费的金额

#得出的值可以继续计算
#例如 a.sum(axis = 0)

生成表格

df.pivot_table(index = 'Sex',columns='Pclass',values='Fare')

df.pivot_table(index = 'Sex',columns='Pclass',values='Fare',aggfunc='mean')
#平均数和上面默认的结果一样
df.pivot_table(index = 'Sex',columns='Pclass',values='Fare',aggfunc='count')
#计数
pd.crosstab(index = df['Sex'],columns = df['Pclass'])
#计数,和上面的计数结果一样
df['Underaged'] = df['Age'] <= 18
#未成年设置一列,分为True和False
df.pivot_table(index = 'Underaged',columns='Sex',values='Survived',aggfunc='sum')
#根据未成年的索引,分出性别。求获救的数量
df.pivot_table(index = 'Underaged',columns='Pclass',values='Fare',aggfunc='count')
#根据未成年为索引,class为列,求出每层甲板的未成年的数量
df[df['Underaged']]
#打印出所有未成年
a = df[df['Underaged']]
a[a['Survived'] == 1]
#打印出所有获救的未成年

pandas时间和datetime时间的区别

a = datetime.datetime(year=2020,month=12,day=24,hour=10,minute=30)
b = pd.Timestamp('2020-12-23-10:30')
#访问方式一致
a.day
b.day
#pd的时间增加方式,增加 5 秒 
b + pd.Timedelta('50 0000 0000')
#pd的时间增加5分
b + pd.Timedelta('5 minute')
#将字符串类型转换为时间类型
s = pd.Series(['2017-11-24 00:00:00','2017-11-25 00:00:00','2017-11-26 00:00:00'])
ts = pd.to_datetime(s)
'''
0   2017-11-24
1   2017-11-25
2   2017-11-26
dtype: datetime64[ns]
'''
ts.dt.day
#调取日的时间
a = list(ts.dt.day)
#将结果装入列表

pandas时间的对时间表格的使用

pd.Series(pd.date_range(start='2022-5-12',periods = 10,freq = '24H'))
#date_range 快速生成时间,10个,每个间隔24小时
data = pd.read_csv('flowdata.csv')
data['Time'] = pd.to_datetime(data['Time'])
#将读进来的时间转变为date类型

data = pd.read_csv('flowdata.csv',index_col = 0 ,parse_dates = True)
#如果就是一个时间序列数据,可以直接把他转换为时间序列
data[pd.Timestamp('2012-01-01 09:00'):pd.Timestamp('2012-01-01 19:00')]
#时间序列数据可以通过切片去获取数据
data['2012-01':'2012-02']
#获取一月到二月的信息
data[data.index.month == 1]
#具体的月
data[(data.index.day == 1) & (data.index.month == 1)]
#多条件获取信息,每年的一月一号信息 支持大于小于号
data.resample('D').mean()
#求每天的平均值
data.resample('3D').max()
#3天一统计
%matplotlib notebook
#开头加这个来说明可以允许画图
data.resample('M').mean().plot()
#将得出的数据画图的形式,展示出来

condas常用 的命令

进行排序

data.sort_values(by=['group','data'],ascending = [False,True])
#以group为倒序,以data为正序
data.sort_values(by='data')
#以一个为核心进行排序
data.drop_duplicates().count()
#去掉完全重复的数据
data.drop_duplicates(subset='group')
#以group为唯一,去掉所有重复的group
#data apply 函数可以对每个数据都执行相同的操作
def food_map(series):
    if series['group'] == 'a':
        return 'A'
    elif series['group'] == 'b':
        return 'B'
data['food_map'] = data.apply(food_map,axis = 'columns')
data
#每一行数据都逐一输出
data.apply(print,axis = 'columns')

对数据快速转换

Upper_dict = {
	'通州':'河北',}
	'廊坊':'河北',
	'朝阳':'北京'
}
#写一个对照表
data['new_flat'] = data['flat'].map(Upper_dict)
#生成一个新列,根据字典对照,进行修改后的新列
df.assign(ration = df['data1']/df['data2'])
#增加一列,命名为ration,值为其他的数据计算结果。
df.drop('ration',axis='columns',inplace=True)
#删除索引为ration的列
ages = [15,18,20,21,22,34,41,52,53,63,79]
bins = [10,20,30,40,50,90]
bins_res = pd.cut(ages,bins)
# 判断 ages 在哪个区间
bins_res
'''
outs:
[(10, 20], (10, 20], (10, 20], (20, 30], (20, 30], ..., (40, 50], (50, 90], (50, 90], (50, 90], (50, 90]]
Length: 11
Categories (5, interval[int64]): [(10, 20] < (20, 30] < (30, 40] < (40, 50] < (50, 90]]
'''
bins_res.codes
#判断在哪个区间
'''
outs:
array([0, 0, 0, 1, 1, 2, 3, 4, 4, 4, 4], dtype=int8)
'''
pd.cut(ages,[10,30,50,80]).codes
#也可以直接传区间数字
'''
array([0, 0, 0, 0, 0, 1, 1, 2, 2, 2, 2], dtype=int8)
'''
#也可以 自己 定义标签
group_names = ['youth','old']
a = pd.cut(ages,[10,20,80],labels=group_names)
pd.value_counts(a)
#out
'''
old      8
youth    3
dtype: int64
'''

condas 缺失值的 应用

df = pd.DataFrame([range(3),[0, np.nan ,0], [0,0,np.nan],range(3) ])
#生成几个含有NaN的 dataframe 的表
df.isnull()
#判断哪个 位置 有null
df.isnull().any()
#判断哪一列有缺失值
df.isnull().any(axis = 1)
#判断哪一行有缺失值
df[df.isnull().any(axis=1)]
#通过回传的方式,把True的行打印出来,也就是把有缺失值的行打印出来

0 1 2
0 0 1.0 2.0
1 0 NaN 0.0
2 0 0.0 NaN
3 0 1.0 2.0

groupby

df = pd.DataFrame({'A':['foo','foo','foo','bar',
                       'foo','bar','foo','bar'],
                  'B':['one','two','one','two',
                      'one','two','one','one'],
                  'C':np.random.randn(8),
                 'D':np.random.randn(8)})
df.groupby(['A','B']).count()
#以两个值为key
s = pd.Series([1,2,3,4,3,2],[8,7,6,6,4,5])
grouped = s.groupby(level = 0,sort = False )
grouped.count()
grouped.sum()
grouped.last()
grouped.first()
#可以使用grouped进行对数据操作

修改索引的名称

df.groupby(['X']).get_group('A')
#只关注X索引列中为A的数据
index = pd.MultiIndex.from_arrays(arrays,name = ['first','second'])
s = pd.Series(np.random.randn(8),index = index )
#设置指定的索引
s.groupby(level = 'first')
#关注first的索引的数据,并打印

进行细化计算

groupd = df.groupby(['A','B']) #可以+  ,as_index  False   一行一行打印,不合并输出
groupd.aggregate[np.sum]
#以 A,B 为键,求 sum 和的操作
#
df.groupby(['A','B']).sum().reset_index()
#另一种显示的方法和上边的结果一致


grouped.describe().head()
#在grouped基础上可以多种属性一下计算出来

#可以自定义显示哪些数据
grouped = df.groupby('A')
grouped['C'].agg([np.sum,np.mean,np.std])
#以A 为索引,对关于A 的 C 的值计算出多个值
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-05-14 09:57:29  更:2022-05-14 09:59:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 5:40:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码