使用python做基本的数据处理
使用python做基本的数据处理
1.常用的基本数据结构
元组、列表、字典、集合、常用的序列函数
1.1基本操作
1.1.1 元组:逗号分开的序列值。
tup = tuple (4,5,6)
tup = (4,5,6) #推荐
tup = 4,5,6
(4,5,6)
虽然对象元组中存储的对象自身是可以改变的,但是元组一旦创建,各个位置上的对象是无法被修改的。
tup = (4,5,[2,4],6)
(4,5,[2,4],6)
tup[2][1] = 3 # 这样的操作是可以的
tup[2] = [2,3] # 直接修改是不可行的
1.1.2 列表:长度可变,内容可变的list
基本操作:
a_list = [1,2,3,None] # 初始化
a_list = list((4,5,6)) # 使用list关键字
a_list.append(7) #添加单个item
a_list.extend([8,9,10]) #添加一串list
a_list + b_list # 也可以用+,copy但是不建议使用,效率低
a_list.remove(10) #移除某一个字符
a_list.insert(1,2) #在具体位置插入item
a_list.pop(2) #弹出某一个位置的item
a_list.sort() #做排序
切片操作: a_list[start:stop:step]
- 起始位置start索引是包含的,结束位置stop索引并不包含。
- 切出来的元素数量是stop - start
- start 和 stop 可以省略,默认是起始位置和结束位置
- 负索引就是从尾部开始数
- 当step为负数时,步长就是反方向移动,如a_list[::-1]
内建序列函数:
- enumrate 增加当前元素的索引
for index,value in enumrate(a_list)
print(index) - zip 将列表或者元组的元素配对,成为新的列表
print(list(zip([1,2],[3,4])))
[(1,3),(2,4)] - reversed 逆序操作
同[::-1] - sorted 排序操作
sorted([7,2,1,3])
[1,2,3,7]
1.1.3 字典 又叫哈希表,关联数组
初始化:a_dict = {'a':'some value','b':1}
基本操作:
a_dict['a'] # some value
a_dict.get('a') # some value
a_dict.get('c','default value') # 取不到值时,可以取默认值
del a_dict['a'] # 删除某个键值对
ret = a_dict.pop('a') # 弹出某个键值对
a_dict.update(b_dict) # 将两个dict合二为一
list(a_dict.keys()) # ['a','b']
list(a_dict.values()) # ['some value',1]
tup = (('a','some value'),('b',1))
b_dict = dict(tup)# {'a': 'some value', 'b': 1}
1.1.4 set 一种无序且元素唯一的容器
初始化:a_set = set([1,2,2,3,4,6]) # {1,2,3,4,6}
基本操作:
a_set = {1,2,3,4}
b_set = {4,5,6,7}
a.union(b) # 1,2,3,4,5,6,7 并集
a|b # 1,2,3,4,5,6,7 并集
a.intersection(b) # 4 交集
a & b # 4 交集
2.列表、集合、字典推导式
他允许你过滤一个容器的元素,用一种简明的表达式转换传递给过滤器的元素,从而生成一个新的列表。
表达式 :[expr for val in collection if condition]
strings = ['a','b','as','bat','car','dove','python']
b_list = [x.upper() for x in strings if len(x) > 2]
['BAT', 'CAR', 'DOVE', 'PYTHON']
eg1:strings = ['a','b','as','bat','car','dove','python'],生成一个字典,key为strings的元素,value是元素的长度。
c_dict = {x:len(x) for x in strings }
eg2:strings = ['a','bat','as','bat','car','dove','python'],生成一个集合,value是元素的长度。
d_set = {len(x) for x in strings }
eg3:strings = ['a','bat','as','bat','car','dove','python'],生成一个字典,key为strings的元素,value是元素的字符列表。
e_dict = {x:[y for y in x] for x in strings }
3.pandas常用方法
pandas两种常用的数据结构:
- Series:包含键值对的一维数据结构。 它类似于 python 字典。
- Dataframe:是一种二维数据结构,它基本上是两个或多个Series的组合。可以理解成value是[] 它们也可以被认为是数据的电子表格,是我们最常用的数据结构。
data1 = {'state': ['Ohio'], 'year': ['1988'], 'pop': ['1.7']}
data1_sr = pd.Series(data1)
state [Ohio]
year [1988]
pop [1.7]
dtype: object
data2 = {'state': ['Ohio', 'Ohio', 'Nevada'], 'year':['1988', '1964', '1955'], 'pop': ['1.7', '2.5', '3.3']}
data_df = pd.DataFrame(data)
state year pop
0 Ohio 1988 1.7
1 Ohio 1964 2.5
2 Nevada 1955 3.3
3.1 DataFrame 取值的方法
df3 = pd.DataFrame(data, columns=['year', 'state', 'pop'], index=['a', 'b', 'c'])
print(df3.year)
print(df3['year']['a']) # 只支持[列][行]
print(df3.loc['a']['year']) # 支持[行][列]
print(df3.columns) # 索引类型都是不可变数组
Index(['year', 'state', 'pop'], dtype='object')
print(df3.index) # 索引类型都是不可变数组
RangeIndex(start=0, stop=3, step=1)
3.2 关于index 的一些方法
obj = pd.Series([4.5, 2.3, 4.6, 2.3], index=['b', 'a', 'd', 'c'])
b 4.5
a 2.3
d 4.6
c 2.3
obj = obj.drop('a') # 删除a行
b 4.5
d 4.6
c 2.3
obj = obj.reindex(['b', 'a', 'd', 'c', 'e'])
b 4.5
a NaN
d 4.6
c 2.3
e NaN
data = {'state': ['Ohio', 'Ohio', 'Nevada'], 'year': ['1988', '1964', '1955'], 'pop': ['1.7', '2.5', '3.3']}
df = pd.DataFrame(data)
state year pop
0 Ohio 1988 1.7
1 Ohio 1964 2.5
2 Nevada 1955 3.3
df = df.drop(columns='year', axis=1) # drop 删除索引
state pop
0 Ohio 1.7
1 Ohio 2.5
2 Nevada 3.3
3.2 常用的方法
3.2.1 deepcopy & copy
data = {'state': ['Ohio', 'Ohio', 'Nevada'], 'year': ['1988', '1964', '1955'], 'pop': ['1.7', '2.5', '3.3']}
df = pd.DataFrame(data)
df2 = df.copy(False)
df3 = df.copy(True)
df2['state'][0] = 'Nevada'
print(df)
state year pop
0 Ohio 1988 1.7
1 Ohio 1964 2.5
2 Nevada 1955 3.3
print(df2) # 浅copy会变化
state year pop
0 Nevada 1988 1.7
1 Ohio 1964 2.5
2 Nevada 1955 3.3
print(df3) # 深copy则不会变化
state year pop
0 Ohio 1988 1.7
1 Ohio 1964 2.5
2 Nevada 1955 3.3
3.2.2 用set_index修剪索引 + to_dict 转成可用的dict
df = pd.DataFrame({"month": [2, 6, 12, 10], "year": [2008, 2012, 2012, 2019], "day": [29, 30, 31, 31]})
df2 = df.set_index("year") # 原来的索引被删除了,year变成索引
print(df2)
month day
year
2008 2 29
2012 6 30
2012 12 31
2019 10 31
df2 = df.set_index("year", drop=False) # 原来的索引被删除了,year也可以不用删除
print(df2)
month year day
year
2008 2 2008 29
2012 6 2012 30
2012 12 2012 31
2019 10 2019 31
info_dict = df2.to_dict('index')# 会报错,有两个2012,ValueError: DataFrame index must be unique for orient='index'.
df2 = df.set_index(['year', 'month'], drop=False) # 用两个值做索引
print(df2)
month year day
year month
2008 2 2 2008 29
2012 6 6 2012 30
12 12 2012 31
2019 10 10 2019 31
info_dict = df2.to_dict('index')
print(info_dict)
{(2008, 2): {'month': 2, 'year': 2008, 'day': 29}, (2012, 6): {'month': 6, 'year': 2012, 'day': 30}, (2012, 12): {'month': 12, 'year': 2012, 'day': 31}, (2019, 10): {'month': 10, 'year': 2019, 'day': 31}}
print(info_dict.get((2012, 6)))
{'month': 6, 'year': 2012, 'day': 30}
3.2.3 使用apply 函数操作数据
df = pd.DataFrame([[4, 9]] * 3, columns=['A', 'B'])
print(df)
A B
0 4 9
1 4 9
2 4 9
df2 = df.apply(lambda x: pd.Series([x[1], x[0]], index=['foo', 'bar']), axis=1)
print(df2)
foo bar
0 9 4
1 9 4
2 9 4
3.2.4 isna 和 isin 通过分离 NaN 或定义数据所在的范围来过滤数据。
df3 = df2.isin([9, 4])
print(df3)
foo bar
0 True True
1 True True
2 True True
df = pd.DataFrame({'num_legs': [2, 4], 'num_wings': [2, 0]}, index=['falcon', 'dog'])
print(df)
num_legs num_wings
falcon 2 2
dog 4 0
df2 = df.apply(lambda x: pd.Series([x[1], pd.NA], index=['foo', 'bar']), axis=1)
print(df2)
foo bar
falcon 2 <NA>
dog 0 <NA>
print(df2.isna().sum())
foo 0
bar 2
dtype: int64
3.2.5 merge方法
df1 = pd.DataFrame({'lkey': ['foo', 'bar', 'baz', 'foo'], 'value': [1, 2, 3, 5]})
df2 = pd.DataFrame({'rkey': ['foo', 'bar', 'baz', 'foo'], 'value': [5, 6, 7, 8]})
print(df1.merge(df2, left_on='lkey', right_on='rkey'))
lkey value_x rkey value_y
0 foo 1 foo 5
1 foo 1 foo 8
2 foo 5 foo 5
3 foo 5 foo 8
4 bar 2 bar 6
5 baz 3 baz 7
使用python做基本的数据处理的更多相关文章
- 使用Python做简单的字符串匹配
由于需要在半结构化的文本数据中提取一些特定格式的字段.数据辅助挖掘分析工作,以往都是使用Matlab工具进行结构化数据处理的建模,matlab擅长矩阵处理.结构化数据的计算,Python具有与matl ...
- 1.2 Why Python for Data Analysis(为什么使用Python做数据分析)
1.2 Why Python for Data Analysis?(为什么使用Python做数据分析) 这节我就不进行过多介绍了,Python近几年的发展势头是有目共睹的,尤其是在科学计算,数据处理, ...
- Python做简单的字符串匹配详解
Python做简单的字符串匹配详解 由于需要在半结构化的文本数据中提取一些特定格式的字段.数据辅助挖掘分析工作,以往都是使用Matlab工具进行结构化数据处理的建模,matlab擅长矩阵处理.结构化数 ...
- 使用python做科学计算
这里总结一个guide,主要针对刚开始做数据挖掘和数据分析的同学 说道统计分析工具你一定想到像excel,spss,sas,matlab以及R语言.R语言是这里面比较火的,它的强项是强大的绘图功能以及 ...
- 12岁的少年教你用Python做小游戏
首页 资讯 文章 频道 资源 小组 相亲 登录 注册 首页 最新文章 经典回顾 开发 设计 IT技术 职场 业界 极客 创业 访谈 在国外 - 导航条 - 首页 最新文章 经典回顾 开发 ...
- [原创博文] 用Python做统计分析 (Scipy.stats的文档)
[转自] 用Python做统计分析 (Scipy.stats的文档) 对scipy.stats的详细介绍: 这个文档说了以下内容,对python如何做统计分析感兴趣的人可以看看,毕竟Python的库也 ...
- 这几天有django和python做了一个多用户博客系统(可选择模板)
这几天有django和python做了一个多用户博客系统(可选择模板) 没完成,先分享下 断断续续2周时间吧,用django做了一个多用户博客系统,现在还没有做完,做分享下,以后等完善了再慢慢说 做的 ...
- 用python做中文自然语言预处理
这篇博客根据中文自然语言预处理的步骤分成几个板块.以做LDA实验为例,在处理数据之前,会写一个类似于实验报告的东西,用来指导做实验,OK,举例: 一,实验数据预处理(python,结巴分词)1.对于爬 ...
- 《用Python做HTTP接口测试》学习感悟
机缘巧合之下,报名参加了阿奎老师发布在"好班长"的课程<用Python做HTTP接口测试>,报名费:15rmb,不到一杯咖啡钱,目前为止的状态:坚定不移的跟下去,自学+ ...
- python做量化交易干货分享
http://www.newsmth.NET/nForum/#!article/Python/128763 最近程序化交易很热,量化也是我很感兴趣的一块. 国内量化交易的平台有几家,我个人比较喜欢用的 ...
随机推荐
- LeetCode-911 在线选举
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/online-election 题目描述 给你两个整数数组 persons 和 times .在选 ...
- EF Core自动将实体映射到数据库
protected override void OnModelCreating(ModelBuilder modelBuilder) { try { var compilationLibrary = ...
- Java后台校验手机号和邮箱
//true是手机号,false不是手机号 public static boolean checkPhone(String phone){ Pattern p = Pattern.compile(&q ...
- el-dialog 遮罩层覆盖内容的问题
页面组件层级太多,就会出现遮罩层覆盖dialog里面内容的问题 解决: :append-to-body="true" 把遮罩层添加到body上面 用z-index 设置没效 ...
- Filters in ASP.NET Core(Net6之过滤器)
Filters in ASP.NET Core 如果觉得样式不好:跳转即可 (md文件复制过来有些样式会不一样) 原文地址:https://lifengying.site/archives/net6% ...
- java 实现Excel导入导出功能
本文记录 首先需要准备一个导入模板的实体类 import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; import cn ...
- MySQL(2): 窗口函数\备份与恢复\性能优化\权限管理
mysql 8.0 新增了窗口函数,与Oracle一样的 MySQL从8.0开始支持窗口函数,这个功能在大多商业数据库和部分开源数据库中早已支持,有的也叫分析函数. 什么叫窗口? 窗口的概念非常重要, ...
- 快速替换jar包class文件的方法
stetp1:jar -tvf *.jar | grep *.class 查找jar包中,class文件所在的具体路径stetp2:jar -xvf *.jar */*/*/*.class 当前目录下 ...
- Pytest之生成allure报告
一.前戏 在之前我们已经学会使用 pytest-html 插件生成 html 格式的测试报告: 1 # 第一步,安装插件 2 pip install pytest-html 3 4 # 第二步,执 ...
- ADE-XL bsub提交超时
查找命令行log, Fatal server error: could not open default font 'fixed' 解决方案: yum install 'xorg-x11-font*'