使用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做基本的数据处理的更多相关文章

  1. 使用Python做简单的字符串匹配

    由于需要在半结构化的文本数据中提取一些特定格式的字段.数据辅助挖掘分析工作,以往都是使用Matlab工具进行结构化数据处理的建模,matlab擅长矩阵处理.结构化数据的计算,Python具有与matl ...

  2. 1.2 Why Python for Data Analysis(为什么使用Python做数据分析)

    1.2 Why Python for Data Analysis?(为什么使用Python做数据分析) 这节我就不进行过多介绍了,Python近几年的发展势头是有目共睹的,尤其是在科学计算,数据处理, ...

  3. Python做简单的字符串匹配详解

    Python做简单的字符串匹配详解 由于需要在半结构化的文本数据中提取一些特定格式的字段.数据辅助挖掘分析工作,以往都是使用Matlab工具进行结构化数据处理的建模,matlab擅长矩阵处理.结构化数 ...

  4. 使用python做科学计算

    这里总结一个guide,主要针对刚开始做数据挖掘和数据分析的同学 说道统计分析工具你一定想到像excel,spss,sas,matlab以及R语言.R语言是这里面比较火的,它的强项是强大的绘图功能以及 ...

  5. 12岁的少年教你用Python做小游戏

    首页 资讯 文章 频道 资源 小组 相亲 登录 注册       首页 最新文章 经典回顾 开发 设计 IT技术 职场 业界 极客 创业 访谈 在国外 - 导航条 - 首页 最新文章 经典回顾 开发 ...

  6. [原创博文] 用Python做统计分析 (Scipy.stats的文档)

    [转自] 用Python做统计分析 (Scipy.stats的文档) 对scipy.stats的详细介绍: 这个文档说了以下内容,对python如何做统计分析感兴趣的人可以看看,毕竟Python的库也 ...

  7. 这几天有django和python做了一个多用户博客系统(可选择模板)

    这几天有django和python做了一个多用户博客系统(可选择模板) 没完成,先分享下 断断续续2周时间吧,用django做了一个多用户博客系统,现在还没有做完,做分享下,以后等完善了再慢慢说 做的 ...

  8. 用python做中文自然语言预处理

    这篇博客根据中文自然语言预处理的步骤分成几个板块.以做LDA实验为例,在处理数据之前,会写一个类似于实验报告的东西,用来指导做实验,OK,举例: 一,实验数据预处理(python,结巴分词)1.对于爬 ...

  9. 《用Python做HTTP接口测试》学习感悟

    机缘巧合之下,报名参加了阿奎老师发布在"好班长"的课程<用Python做HTTP接口测试>,报名费:15rmb,不到一杯咖啡钱,目前为止的状态:坚定不移的跟下去,自学+ ...

  10. python做量化交易干货分享

    http://www.newsmth.NET/nForum/#!article/Python/128763 最近程序化交易很热,量化也是我很感兴趣的一块. 国内量化交易的平台有几家,我个人比较喜欢用的 ...

随机推荐

  1. 你有了解过无服务器架构(Serverless)数据库吗?

    你有了解过无服务器架构(Serverless)数据库吗? 什么是Serverless呢?简单理解,Serverless 分为  FaaS 和 BaaS 两个部分,其中 FaaS 指的是函数即服务,Ba ...

  2. JDK8在xp安装办法

    jdk默认不支持xp,用到了后来的api,直接没法安装. 具体安装步骤: 1.用7-zip打开jdk8的版本8u231之前的版本. 2.导航到 .rsrc\1033\JAVA_CAB10\111把里面 ...

  3. Python3 时间戳格式化和减法运算

    import datetime import time # 获取当前时间(2023-02-16 16:41:36) now_date = datetime.datetime.now().strftim ...

  4. VMwareSDN环境配置之git安装

    ------------恢复内容开始------------ null ------------恢复内容结束------------

  5. 流(stream)如何理解?

    前言 如果你搜索输入输出函数,那么你会看到各种各样的流.那么这个流到底是什么东西呢,本文将形象地类比介绍通用的流. 怎样理解通用的流 流,顾名思义就是像水流一样可以流动的事物,可以在不同的领域来去自如 ...

  6. Windows 11在使用AMD时,CPU占用率持续100%的解决方案

    一.现象 Windows 11在使用AMD时,CPU占用率持续100%,持续好几个系统版本都是如此 二.系统版本: 版本 Windows 11 专业工作站版版本 22H2安装日期 ‎2022/‎10/ ...

  7. reids 启动方法

    ---恢复内容开始--- 在windows环境下启动redis服务,前提是你安装好了,启动如下: 一,进入redis的安装目录下,在地址栏输入"cmd",回车 二,然后会进入cmd ...

  8. 蓝牙mesh组网实践(节点功能介绍)

    目录 未配网设备在配好网,被纳入网络后,可称之为节点. 蓝牙mesh网络中,节点可以有选择地支持四大功能--朋友.低功耗.转发.代理功能,可以复用多个功能(由于单片机硬件限制,ch582除了复用转发功 ...

  9. Workbench download Document

    1. package.xml <?xml version="1.0" encoding="UTF-8"?> <Package xmlns=&q ...

  10. vue中组件传值的几种方式

    一.父组件给子组件传值方式(步骤) 1.VC1(子组件)定义props[a,b,c] 注意:props中的每个值都可以加各种修饰,如数据类型,是否可为空,默认值... 2.VC2(父组件)引用子组件 ...