2019-03-25 Python Pandas 基本操作
新建表
data1 = {
"name": ["Tom", "Bob", "Mary", "James"],
"age": [18, 30, 35, 18],
"city": ["Bei Jing ", "Shang Hai ", "Guang Zhou", "Shen Zhen"]
}
df1 = pd.DataFrame(data=data1)
df1
重命名列
df1.rename(columns={"name": "name1"}, inplace=True)
df1
重命名列的值
df1["sex"] = "male"
df1
重命名索引
user_age.index = ["Tom", "Bob", "Mary", "James"]
user_age
为索引取个值
user_age.index.name = "name"
user_age
访问行,获取第4个和第二个元素
# series
user_age[[3, 1]]
# dataframe
user_info.iloc[1:3]
# 每两行选一次数据
user_info[::2] # 筛选出名称为 Tom 的年龄
# 筛选出索引名称在 Tom 到 Mary 之间的数据
user_info.loc["Tom", "age"]
user_info.loc["Tom": "Mary"]
# 筛选出年龄这一列数据
user_info.loc[:, ["age"]]
# 筛选出性别属于 male 和 female的数据
user_info[user_info.sex.isin(["male", "female"])]
# 年龄大于20的
user_info.loc[user_info.age > 20, ["age"]]
user_info.loc[lambda df: df.age > 20, lambda df: ["age"]]
访问列
user_info[["city", "age"]]
# 对所有信息进行反转
user_info[::-1]
排序:如果想要按照列进行倒序排,可以设置参数 axis=1 和 ascending=False
user_info.sort_index(axis=1, ascending=False)
# 按实际值来排序
user_info.sort_values(by="age")
函数
# 对 Series 来说,apply 方法 与 map 方法区别不大。
user_info.age.apply(lambda x: "yes" if x >= 30 else "no")
# 对 DataFrame 来说,apply 方法的作用对象是一行或一列数据(一个Series)
user_info.apply(lambda x: x.max(), axis=0)
类型操作
pd.to_numeric(user_info.height, errors="coerce")
缺失值处理
# 一行数据只要有一个字段存在空值即删除
user_info.dropna(axis=0, how="any") # 一行数据所有字段都为空值才删除
user_info.dropna(axis=0, how="all") # 一行数据中只要 city 或 sex 存在空值即删除
user_info.dropna(axis=0, how="any", subset=["city", "sex"]) #使用线性差值来填充
user_info.age.interpolate() #替换
user_info.replace({"age": 40, "birth": pd.Timestamp("1978-08-08")}, np.nan) #除了可以替换特定的值之外,还可以使用正则表达式来替换,如:将空白字符串替换成空值
user_info.city.replace(r'\s+', np.nan, regex=True) # 将无缺失值的值传给有缺失值的
age_new = user_info.age.copy()
age_new.fillna(20, inplace=True)
age_new
user_info.age.combine_first(age_new)
#我们可以使用 .cat.categories 来获取分类数据所有可能的取值
user_info.cat.categories
分类数据也是支持使用 value_counts 方法来查看数据分布的
user_info.value_counts()
分类数据也是支持使用 .str 属性来访问的。例如想要查看下是否包含字母 "A",可以使用 .srt.contains 方法
user_info.str.contains("A")
#有时候,我们可能想要生成某个范围内的时间戳。例如,我想要生成 "2018-6-26" 这一天#之后的8天时间戳,如何完成呢?我们可以使用 date_range 和 bdate_range 来完成时间##戳范围的生成。
#date_range 默认使用的频率是 日历日,而 bdate_range 默认使用的频率是 营业日。当然#了,我们可以自己指定频率,比如,我们可以按周来生成时间戳范围
pd.date_range("2018-6-26", periods=8)
pd.bdate_range("2018-6-26", periods=8)
# 按周来生成
pd.date_range("2018-6-26", periods=8, freq="W")
#转换时间戳
pd.to_datetime(["2005/11/23", "2010.12.31"])
#时间偏移
from pandas.tseries.offsets import *
d = pd.Timestamp("2018-06-25")
d + DateOffset(weeks=2, days=5)
ts.shift(2, freq=Day())
#resample 表示根据日期维度进行数据聚合,可以按照分钟、小时、工作日、周、月、年等来作为日期维度
# 求出每个月的数值平均值
ts.resample("1M").mean()
通过 pd.merge 可以关联两个DataFrame,这里我们设置参数 on="name",表示依据 name 来作为关联键。
pd.merge(df1, df2, on="name")
关联后发现数据变少了,只有 3 行数据,这是因为默认关联的方式是 inner,如果不想丢失任何数据,可以设置参数 how="outer"。
pd.merge(df1, df2, on="name", how="outer")
可以看到,设置参数 how="outer" 后,确实不会丢失任何数据,他会在不存在的地方填为缺失值。
如果我们想保留左边所有的数据,可以设置参数 how="left";反之,如果想保留右边的所有数据,可以设置参数 how="right"
pd.merge(df1, df2, on="name", how="left")
有时候,两个DataFrame中都包含相同名称的字段,如何处理呢?
我们可以设置参数 suffixes,默认 suffixes=('_x', '_y') 表示将相同名称的左边的DataFrame的字段名加上后缀 _x,右边加上后缀 _y。
pd.merge(df1, df2, left_on="name1", right_on="name2", suffixes=("_left", "_right"))
除了 merge 这种方式外,还可以通过 join 这种方式实现关联。相比 merge,join 这种方式有以下几个不同:
- 默认参数
on=None,表示关联时使用左边和右边的索引作为键,设置参数on可以指定的是关联时左边的所用到的键名 - 左边和右边字段名称重复时,通过设置参数
lsuffix和rsuffix来解决。
df1.join(df2.set_index("name2"), on="name1", lsuffix="_left")
IO操作
#读取出来生成了一个 DataFrame,索引是自动创建的一个数字,我们可以设置参数 index_col 来将某列设置为索引,可以传入索引号或者名称
pd.read_csv("../data/user_info.csv", index_col="name") #Pandas 默认将第一行作为标题,但是有时候,csv文件并没有标题,我们可以设置参数 names 来添加标题。
data="Tom,18.0,2000-02-10,\nBob,30.0,1988-10-17,male"
print(data)
pd.read_csv(StringIO(data), names=["name", "age", "birth", "sex"]) #有时候可能只需要读取部分列的数据,可以指定参数 user_cols
pd.read_csv(StringIO(data), usecols=["name", "age"]) #空值填充为NaN
pd.read_csv(StringIO(data), keep_default_na=False)
2019-03-25 Python Pandas 基本操作的更多相关文章
- [2019.03.25]Linux中的查找
TMUX天下第一 全世界所有用CLI Linux的人都应该用TMUX,我爱它! ======================== 以下是正文 ======================== Linu ...
- 2018.03.27 python pandas merge join 使用
#2.16 合并 merge-join import numpy as np import pandas as pd df1 = pd.DataFrame({'key1':['k0','k1','k2 ...
- ARTS Challenge- Week 1 (2019.03.25~2019.03.31)
1.Algorithm - at least one leetcode problem per week(Medium+) 986. Interval List Intersections https ...
- zabbix学习笔记----概念----2019.03.25
1.zabbix支持的通讯方式 1)agent:专用的代理程序,首推: 2)SNMP: 3)SSH/Telnet: 4)IPMI,通过标准的IPMI硬件接口,监控被监控对象的硬件特性. 2)zab ...
- 2019.03.25 bzoj4572: [Scoi2016]围棋(轮廓线dp)
传送门 题解可以参见zjjzjjzjj神仙的,写的很清楚. 代码: #include<bits/stdc++.h> #define ri register int using namesp ...
- 2019.03.25 bzoj4568: [Scoi2016]幸运数字(倍增+线性基)
传送门 题意:给你一棵带点权的树,多次询问路径的最大异或和. 思路: 线性基上树?? 倍增维护一下就完了. 时间复杂度O(nlog3n)O(nlog^3n)O(nlog3n) 代码: #include ...
- 2019.03.25 bzoj4567: [Scoi2016]背单词(trie+贪心)
传送门 题意: 给你n个字符串,不同的排列有不同的代价,代价按照如下方式计算(字符串s的位置为x): 1.排在s后面的字符串有s的后缀,则代价为n^2: 2.排在s前面的字符串有s的后缀,且没有排在s ...
- 2019.03.25 bzoj4539: [Hnoi2016]树(主席树+倍增)
传送门 题意:给一棵大树,令一棵模板树与这棵树相同,然后进行mmm次操作,每次选择模板树中的一个节点aaa和大树中一个节点bbb,把aaa这棵子树接在bbb上面,节点编号顺序跟aaa中的编号顺序相同. ...
- 2019.03.25 bzoj2329: [HNOI2011]括号修复(fhq_treap)
传送门 题意简述: 给一个括号序列,要求支持: 区间覆盖 区间取负 区间翻转 查询把一个区间改成合法括号序列最少改几位 思路: 先考虑静态的时候如何维护答案. 显然把所有合法的都删掉之后序列长这样: ...
随机推荐
- 找不到javax.servlet.http.HttpServletResponse和javax.servlet.http.HttpServletRequest
导了个项目进eclipse,发现很多文件都报了错,错误提示是没有引入javax.servlet.http.HttpServletRequest和javax.servlet.http.HttpServl ...
- 【codeforces 807A】Is it rated?
[题目链接]:http://codeforces.com/contest/807/problem/A [题意] 给你n个人在一场CF前后的rating值; 问你这场比赛是不是计分的 [题解] 如果有一 ...
- BJFU fudq的等式
/* BJFU fudq的等式 http://101.200.220.237/contest/19/problem/118/ 数论 勒让德定理 二分答案 */ #include <cstdio& ...
- 01springMVC入门
1 MVC模式回顾 Spring MVC是一种基于MVC的Web应用框架. MVC是一种设计模式,MVC在b/s系统下的应用: 执行步骤: 发出请求,请求到MVC当中的C,C接收请求后并不能 ...
- 操作服务器及MySQL数据库可以使其远程链接
转自原文操作服务器及MySQL数据库可以使其远程链接 一般情况分三个地方准备,MySQL数据库,防火墙,还有你的服务器主机的准备 操作系统为centos6.5.其他系统大致差不多. 1:在服务器中安装 ...
- Android获取图片实际大小兼容平板电脑
项目中有个图片在平板电脑中显示特别小的原因.一直苦于没找到原因,也没有平板电脑測试,今天找了个改动分辨率的,编写相关方法最终处理了,记录下比較: 好让以后不造轮子. 主要是获取文章相关图片显示问题.直 ...
- cpu真实占用率检測工具
windows任务管理器所示CPU占用,一直在不断的变动跳跃 ,并不能反应真实的平均CPU占用率.迅雷下载工具也是一样 ,有时这些知名软件,反倒是没有做的这么人性化,细致.或 许就是不想让人知道 ...
- This Activity already has an action bar supplied by the window decor
问题描写叙述:继承自AppCompatActivity,使用Toolbar替代ActionBar的时候.出现错误 错误信息: 2.Caused by: java.lang.IllegalStateEx ...
- 24岁菜鸟,能一个人撑起App开发吗
"疲惫吾心.怎样躲藏.四处荒芜,怎话忧伤?"临近中秋,看到艾瑞斯的QQ签名,无尽的伤感.这个年仅24的青年.连续3年没有回家了,近期一个月总是失眠,没有家人的陪伴,就连女朋友 ...
- 【Python】python网络协议
套接字是常见的低级别的网络通讯协议,在此基础上,还有很多其他的网络通讯协议.用于实现client-server的网络互联,以下对这些协议做一个简单的介绍. 1.文件传输 FTP:文件传输协议.能够上传 ...