pandas基础学习
1、导入两个数据分析重要的模块
import numpy as np
import pandas as pd
2、创建一个时间索引,所谓的索引(index)就是每一行数据的id,可以标识每一行的唯一值
dates = pd.date_range('20161024',periods=6)
3、创建一个6X4的数据:randn函数用于创建随机数,参数表示行数和列数,dates是上一步创建的索引列
df = pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))
4、使用字典来创建数据框,例如创建一个列名为A的数据框,索引不加则是自动创建的整数
例子1:df = pd.DataFrame({'A':np.random.randn(6)})
例子2:df = pd.DataFrame({'A':pd.Timestamp('20161024'),'B':pd.Series(1)})
假如字典内的数据长度不同,以最长的数据为准,比如B列有4行
df = pd.DataFrame({'A':pd.Timestamp('20161024'),'B':pd.Series(1,index=list(range(4)))})
5、查看数据
print(df.dtypes) #查看数据格式
print(df) #查看所有数据
print(df.head()) #查看指定前几行的数据,默认是前5行
print(df.tail()) #查看指定前几行的数据,默认是后5行
print(df.index) #查看数据索引
print(df.columns) #查看数据列名
print(df.values) #查看数据值
print(df.describe) #查看描述性统计
6、使用T来转置数据,也就是行列转换
print(df.T)
7、对数据进行排序,用到了sort,参数可以指定根据哪一列数据进行排序。
df = pd.DataFrame({'A':(22,44,33,11),'B':(111,222,333,444)})
print(df.sort(columns='A'))
8、数据的选择,选择数据就是用到了切片和loc、at方法
df['A'] 选择A列的操作
df[1:3] 还可以使用数组的切片操作,但是注意了,切片得到的是行数据,如果你想使用这个方法得到列,那就会出现错误
df['20161026':'20161028'] 可以使用行标签来指定输出的行,类似于切片
df.loc[dates[0]] DataFrame的loc方法是帮助选择数据的,比如选择索引位置为0的一行数据(注意我们是用dates作为索引的)
df.loc[:,['A','B']] 选择多列数据的写法
df.loc['20161026':'20161028',['A','B']] 选择局部数据,是行和列的交叉区域
df.loc[dates[0],'A'] 只选择某一个数据,可以指定行和列
df.loc[dates[0],'A'] at方法是专门用于获取某个值的
9、DataFrame切片操作
df.iloc[3] 使用iloc方法,提取第四行数据
df.iloc[3:5,0:2] 返回4-5行,1-2列数据
df.iloc[[1,2,4],[0,2]] 可以提取不连续行和列的数
df.iloc[1:3,:] 提取某一样或者某几行的数据,保证所有列都在,可以使用一个冒号来表示所有列
df.iloc[:,1:3] 所有行,也可以用冒号来表示
df.iloc[1,1] 提取某一个值,去掉所有冒号,比如取第2行第2列的这个数
df.iat[1,1] iat是专门提取某个数的方法,它的效率高更高,因此建议在提取单个数的时候用iat
10、Dataframe筛选数据
df[df.D>0] 筛选D列数据中大于0的行
df[(df.D>0)&(df.C<0)] 使用&符号可以实现多条件筛选,当然是用"|"符号也可以实现多条件,只不过他是或的关系。
df[['A','B']][(df.D>0)&(df.C<0)] 我们只需要A和B列数据,而D和C列数据都是用于筛选的,可以这样写:只返回了AB两列数据
可以使用insin方法来筛选特定的值:
alist = [0.05397,0.687087,0.36545]
print(df['D'].isin(alist))
11、单列数据格式的转换
df = pd.read_csv('000917.csv',encoding='gbk')
df = df[df['涨跌幅']!='None']
df['涨跌幅'] = df['涨跌幅'].astype(np.float64)
print(type(df.loc[2,'涨跌幅']))
12、统计名称的个数
df = pd.read_csv('000917.csv',encoding='gbk')
df = df[df['涨跌幅']!='None']
df['涨跌幅'] = df['涨跌幅'].astype(np.float64)
t = df['名称'].value_counts()
print(t)
##电广传媒 3519
##G 电 广 193
##电广实业 158
##Name: 名称, dtype: int64
12、操作多索引MultiIndex
# -*- coding: utf-8 -*-
import os
import pandas as pd
import numpy as np #建立一个带二重索引的DataFrame df = pd.DataFrame()
df['a'] = list(range(10,30,2))
df['b'] = df['a'] // 10 df.index.name = 'id'
df = df.set_index([df['b'],df.index],drop=False) #对带多重索引的dataframe取值一般使用xs df = df.xs(1,level='b') #选取第一级b=2,id=6
#df.xs((2,6))
#使用PD.IndexSlice可以更花式的
#这里因为使用的是loc,所以返回的是引用,可以修改原值
#IndexSlice中,每一级的index都要有对应的取值,全取则用”:”
#idx['b','id']
#idx = PD.IndexSlice
#df.loc[idx[:,[1,3,8]],'a'] print(df)
13、数据分组,数据分组的好处是你可以一次性计算得到所有分组中的统计量,比如想计算男女学生的平均成绩分别是多少
grouped = df.groupby('A') 对A列进行分组
grouped = df.groupby(['A','B']) 对A列和B列同时进行分组
14、字符串操作
s = pd.Series(list('ABCDEF'))
print(s.str.lower()) 转换小写
print(s.str.upper()) 转换大写
print(s.str.len()) 求长度
s = pd.Series(['a_b_c','c_a_b',np.nan,'f_g_h']) 切割字符串,转换成list
print(s.str.split('_'))
print(s.str.split('_').str.get(1)) 使用get方法获得列中的某个元素
print(s.str.replace('^a|b$','X',case=False)) 使用replace,replace的第一个参数是正则表达式,第二个参数是要替换成的字符串。
14、字符串提取数据
s = pd.Series(['a1','a2','b1','b2','c3','c'])
print(s.str.extract('[ab](\d)')) 提取一个
print(s.str.extract('([abc])(\d)')) 提取多个
print(s.str.extract('([abc])(\d)?')) 你要灵活使用问号,它表示可有可无,下面的方式可以匹配字符“c”
s.str.extract('(?P<letter>[abc](?P<digit>\d)') 输出的结果包含变量名(列名)
15、填充缺失值
df.fillna(0) 使用0替代缺失值
df.fillna('missing') 用一个字符串代替缺失值
df.fillna(method='pad') 用前一个数据代替NaN:method='pad'
df.fillna(method='bfill',limit=1) 用后一个数据代替
df.fillna(df.mean()) 使用平均数或者其他描述性统计量来代替NaN
df.fillna(df.mean()['one','two']) 可以选择哪一列进行缺失值的处理
16、删除缺失数据
df.dropna(axis=0) 选择删除行,使用参数axis=0,这是最常用的方法
df.dropna(axis=1) 选择删除列
17、值替换
df.replace(0,6) 将0替换为6
df.replace([0,1,2,3,4,5],[5,4,3,2,1,0]) 列表到列表的替换
df.replace({1:11,2:12}) 使用字典映射:将1替换为11,将2替换为12
方法可以用在列上
pandas基础学习的更多相关文章
- Pandas基础学习与Spark Python初探
摘要:pandas是一个强大的Python数据分析工具包,pandas的两个主要数据结构Series(一维)和DataFrame(二维)处理了金融,统计,社会中的绝大多数典型用例科学,以及许多工程领域 ...
- pandas基础学习一
生成对象 用值列表生成 Series 时,Pandas 默认自动生成整数索引: In [3]: s = pd.Series([1, 3, 5, np.nan, 6, 8]) In [4]: s Out ...
- Pandas 基础学习
加载数据 Fun:pandas.read_csv >>> import pandas >>> food_info = pandas.read_csv("f ...
- numpy+pandas 基础学习
#-*- coding:utf-8 -*- import numpy as np; data1=[1,2,3,4,5] array1=np.array(data1) #创建数组/矩阵 # 使用nump ...
- Python 读取UCI iris数据集分析、numpy基础学习
python基础.numpy使用.io读取数据集.数据处理转换与简单分析.读取UCI iris数据集中鸢尾花的萼片.花瓣长度数据,进行数据清理,去重,排序,并求出和.累积和.均值.标准差.方差.最大值 ...
- python学习笔记(四):pandas基础
pandas 基础 serise import pandas as pd from pandas import Series, DataFrame obj = Series([4, -7, 5, 3] ...
- Pandas 基础(1) - 初识及安装 yupyter
Hello, 大家好, 昨天说了我会再更新一个关于 Pandas 基础知识的教程, 这里就是啦......Pandas 被广泛应用于数据分析领域, 是一个很好的分析工具, 也是我们后面学习 machi ...
- 基于 Python 和 Pandas 的数据分析(2) --- Pandas 基础
在这个用 Python 和 Pandas 实现数据分析的教程中, 我们将明确一些 Pandas 基础知识. 加载到 Pandas Dataframe 的数据形式可以很多, 但是通常需要能形成行和列的数 ...
- 零基础学习Python数据分析
网上虽然有很多Python学习的教程,但是大多是围绕Python网页开发等展开.数据分析所需要的Python技能和网页开发等差别非常大,本人就是浪费了很多时间来看这些博客.书籍.所以就有了本文,希望能 ...
随机推荐
- vue2.0介绍
1.vue.js 是什么 vue(view)是一套构建用户界面的渐进式框架 Vue (pronounced /vjuː/, like view) is a progressive framework ...
- linux基础优化
[root@moban oldboy]# for oldboy in `chkconfig --list |grep "3:on" |awk '{print $1}' |grep ...
- BZOJ4753 JSOI2016最佳团体(分数规划+树形dp)
看到比值先二分答案.于是转化成一个非常裸的树形背包.直接暴力背包的话复杂度就是O(n2),因为相当于在lca处枚举每个点对.这里使用一种更通用的dfs序优化树形背包写法.https://www.cnb ...
- [洛谷P4208][JSOI2008]最小生成树计数
题目大意:有$n$个点和$m$条边(最多有$10$条边边权相同),求最小生成树个数 题解:对于所有最小生成树,每种边权的边数是一样的.于是就可以求出每种边权在最小生成树中的个数,枚举这种边的边集,求出 ...
- 周记【距gdoi:91天】
这星期挺没状态的.听蔡大神讲组合游戏,然后欢乐得以为自己懂了,然后看到题目就懵了,然后就各种乱各种走神……但是某大神们(kpm和child)疯狂地切题.然后又颓废了两个晚上后决定滚回去文化课(oi没状 ...
- VK Cup 2016 - Round 1 (Div. 2 Edition) A Bear and Reverse Radewoosh
A. Bear and Reverse Radewoosh time limit per test 2 seconds memory limit per test 256 megabytes inpu ...
- word公式编辑中的转义字符
Some of the commonly used symbols: \infty - Infinity \leq - Less then or equal \geq - ...
- [codeforces gym Matrix God]随机矩阵乘法
题目链接:http://codeforces.com/gym/101341/problem/I 随机真是一个神奇的方法.原本矩阵乘法是n^3的复杂度,但是这个题是让判断两个矩阵是否相等,只需要在两个矩 ...
- URAL - 1486 Equal Squares 二维哈希+二分
During a discussion of problems at the Petrozavodsk Training Camp, Vova and Sasha argued about who o ...
- LA2995 Image is everything
蓝书P12 #include <cstdio> #include <cstring> #include <cmath> #include <algorithm ...