pandas 在某个列表中的值 筛选列_Pandas 基础操作

本文介绍了Pandas的基础操作,包括Series和DataFrame的创建、属性、数据获取与保存,以及数据筛选方法如loc和iloc的使用。通过实例展示了如何读取CSV和Excel数据,以及如何进行数据筛选和删除。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0746ead84ed7c14ba7df200562bbf785.png
  1. pandas常用数据结构
  2. 数据获取与保存
  3. 数据筛选

一、常用数据结构(pandas是基于numpy的)

Series(序列)

  • 由一组数据以及一组与之对应的数据标签(即索引)组成
  • 可以通过pandas.Series来创建Series,每个Series可以看成式DataFrame的一个列

a、创建一个序列

import numpy as np
import pandas as pd
#创建序列既可以用列表,字典,也可以用np的数组结构  其中index是每个序列的索引,name是该对象的名字
series1 = pd.Series([2.7,3.01,8.99,8.59,5.18],index=['a','b','c','d','e'],name='This is a series')
series2 = pd.Series(np.array([2.7,3.01,8.99,8.59,5.18]),index=['a','b','c','d','e'],name='This is a series2')

print(series1)

fc005737d124a6ffc4c80ba7dd85e7dc.png

d1aab3f1da7a6265fdb766de71c278d2.png

注:上述参数中,index表示的是索引,必须与数据等长度,name代表对象名称

b、series常用属性

  • value:返回Series对象所有元素
  • index:返回索引
  • dtypes:返回数据类型
  • shape:返回series数据形状
  • ndim:返回对象维度
  • size:返回对象个数
import numpy as np
import pandas as pd
series = pd.Series({'北京':2.8,'上海':3.01,'广东':8.99,'江苏':8.59,'浙江':5.18})
print(series.values)
print(series.index)
print(series.index.values)  # 输出的是array 索引
print(series.dtypes)
print(series.ndim)
print(series[0:3])  # python是左开右闭的,第四行元素是去不到的
print(series['北京']) # 输出北京的值
print(series['北京':'广东'])  # 输出北京到广东

2bb9abacf3a9f3e00034390bfbd45c5f.png

series拼接,修改,删除:

import numpy as np
import pandas as pd
series1 = pd.Series({'北京':2.8,'上海':3.01,'广东':8.99,'江苏':8.59,'浙江':5.18})
series2 = pd.Series({'四川':3.8,'重庆':2.01})
series1 = series1.append(series2)  #将series2拼接到series1后面
print(series1)
#修改
series1['北京'] = 2.89
print(series1)
#删除   删除这里要注意下,加上inplace = True 才是真正对元素进行删除,如果不加只是对视图
#进行删除,此时并没有真正的删除掉
series1.drop(['四川'],inplace=True)
print(series1) 

注:重点注意删除的时候要加上inplace = True 才能够把元素真正的删除

DataFrame

  • DataFrame是pandas基本数据结构,类似于数据库中的表或者EXCEL中的表格数据格式
  • DataFrame既有行索引,也有列索引,可以看成十多个Series组成的
  • 通过pandas.DataFrame来创建DataFrame数据结构
  • pandas.DataFrame(data,index,dtype,columns)
  • 上述参数中,data可以为列表,array或者dict
  • 上述参数中,index表示航索引,columns代表列名或者列标签

a、创建DataFrame的三种方法

import numpy as np
import pandas as pd

list = [['张三','男',23],['李四','男',25],['王五','女',18]]
array =np.array(list)
#[['张三', '男', 23], ['李四', '男', 25], ['王五', '女', 18]]
df1 = pd.DataFrame(list,columns=['姓名','性别','年龄'])  #列表
df2 = pd.DataFrame({'姓名':['张三','李四','王五'],'性别':['男','男','女'],'年龄':[23,25,18]}) #字典
df3 = pd.DataFrame(array,columns=['姓名','性别','年龄'])  #array
print(df1)
print(df2)
print(df3)

bfc8f2ec6ba77660bd070f800b349783.png

b、DataFrame的常用属性

  • values:返回Series对象所有元素
  • index:返回索引
  • dtypes:返回每一列的数据类型
  • shape:返回series数形状
  • ndim:返回对象维度
  • size:返回对象个数
  • columns:返回列标签
import numpy as np
import pandas as pd

list = [['张三','男',23],['李四','男',25],['王五','女',18]]
array =np.array(list)
#[['张三', '男', 23], ['李四', '男', 25], ['王五', '女', 18]]
df1 = pd.DataFrame(list,columns=['姓名','性别','年龄'])  #列表
df2 = pd.DataFrame({'姓名':['张三','李四','王五'],'性别':['男','男','女'],'年龄':[23,25,18]})
df3 = pd.DataFrame(array,columns=['姓名','性别','年龄'])
print(df1)
print(df1.shape) #输出数据有几行几列
print(df1.dtypes) # 输出每一列数据的类型
print(df1.columns) # 输出属性有哪些列名
print(df1.columns.tolist()) # 以列表的形式输出
print(df1.ndim) #输出数据的维度
print(df1.size) # 输出数据由几个元素构成
print(df1.index.tolist()) #输出该对象的列标签

4ef95cec314a6eb9881e2ab1cc0d57e3.png

二、数据的获取与保存

  • pandas内置了10多种数据源读取函数,常见的就是CSV和EXCEL
  • pandas读取出来的数直接是数据框格式,方便后续的数据处理和分析
  • 可以快速将数据保存为CSV或者EXCEL格式
  • 参数较多,可以自行控制,但很多时候用默认参数
  • 读取CSV时,注意编码,常用编码为utf-8,gbk,gbk2312等

a、读取csv数据

import os
import pandas as pd

os.getcwd() #获取当前的路径

os.chdir('C:data第三章')  #将python的路径改为刚刚获取的当前路径
#经过上一步之后下面的路径可以直接写成文件的名称 凡是文件中有中文的就将编码改为gbk   dtype:将info_id这个变量以字符串类型去读取
#nrow=10 代表只读取前10行 sep:分隔符,默认是,  header:表示以第几行为表头,默认第0行
df = pd.read_csv('meal_order_info.csv',encodind='gbk',dtype={'info_id':str},nrow=10,sep=',',header=0) 
df.head(5)  #查看前5行
df.tail(5)  #查看最后5行
df.types  #查看每一列变量数据的类型

b、读取excel数据

64e1adb3207314e3ceb50c4dec4a4167.png

注:sheet_name表示工作页名称

连续读取多个工作页(重点)

7336708fc94af4d13c0db82a0bbf2b90.png

c、保存数据

309920ee3a9957b51b065abfd4d4ee1d.png

index=False:表示不写入自动生成的索引

三、数据筛选

方法:

  • 基础索引方式,就是直接引用
  • ioc[行索引名称或者条件,列索引名称或者标签]
  • iloc[行索引位置,列索引位置]
  • 增删改查和条件查询
  • 熟练掌握drop(labels,axis,inplace=True)的用法

a、直接引用

第一步:按照上面的读取excel数据的方法读取数据

63e70dfc3327d9e0873eb7d96ab8e8da.png

第二步:读取到数据之后可以先看看数据的前五行,后五行,看看数据有哪些列名,看看数据的类型有哪些:

order.head(5) #查看数据前五行有什么
order.tail(5) #查看数据后五行有什么
order.columns #查看数据有哪些列名
order.dtypes #查看数据有哪些类型
order.ndim #查看数据的维度
order.shape #查看数据有多少行多少列
order.size #查看总共有多少个元素  就等于行数乘以列数
order.[:10] #查看前10行,显示得是0-9行

第三步:数据选择

选择数据中某一变量:

d84391219af0c5cf56668b29c519c74f.png

查看其数据结构:order是dataframe,而变量是series

2329eeb446be150e6721b1a3d2c4fd9b.png

选取多列的指定行数:(选取前50行)

1cfeab957da4fbfa944d7863d07b8870.png

b、loc和iloc的用法:

loc 指定选取哪些行,哪些列:

a92886fb2f20e0acc027aa2d5bec4dd9.png
0:2表示的是0-2行

7f71046009ce6f6e4e0a5272b50769f0.png
只取标签为7的行

557c83c516a07b106fc019ac56483cb1.png
选取标签为7和标签为10的行

筛选出满足指定变量等于多少的所有的行:

8025ac70eef107bea010e786ae2bf069.png

iloc[A,B] A,B分别代表列的位置和行的位置(如果是iloc[0:6]只写出了一个,那么它代表的是A,也就是说只取出前面的1-7行)

aae71ad73f85de026b5c92fe6f2688a7.png
取2,3,4列所有的行

6720ca948858425a9200eb19da7c9ec7.png
取第3,4列所有的行
### 如何在 Pandas 中基于过滤行 为了实现基于的行筛选,在 Pandas 库中可以采用布尔索引的方式完成此操作。通过定义一个条件表达式,该表达式的返回结果是一个布尔数组,它与 DataFrame 的每一行对应;只有当对应的布尔为 `True` 时,相应的行才会被保留下来。 对于简单的条件判断可以直接利用比较运算符来构建这个逻辑测试语句,并将其应用于目标上。例如,如果想要选出 'A' 等于某个具体数(比如2)的所有记录,则可以通过下面这种方式来进行: ```python import pandas as pd # 创建示例数据框 data = {'A': [1, 2, 3], 'B': ['a', 'b', 'c']} df = pd.DataFrame(data) rows_age_2 = df[df['A'] == 2] print("Rows where A is 2:\n", rows_age_2)[^5] ``` 这段代码会打印出所有满足 `'A'==2` 这一条件的行。这里需要注意的是,方括号内的部分实际上就是一个由 True 和 False 组成的一维数组,长度跟原 DataFrame 行数相同,用来指示哪些行应该留下来。 除了基本相等关系外,还可以应用其他类型的条件,如不等于、大于/小于以及介于两个之间等情况。这些都可以借助 Python 内置的操作符轻松达成。另外,也可以组合多个条件一起使用,只需用到按位逻辑运算符 (`&`, `|`) 并且记得给每个单独条件加上圆括号以确保优先级正确无误[^1]。 #### 复杂条件下的多条件联合查询例子 假设现在有一个更复杂的需求——找出那些既不是缺失也不是零而且位于特定范围之内的元素所在位置的话,就可以这样做: ```python filtered_df = df[(df['column_name'].notna()) & (df['column_name'] != 0) & ((df['column_name'] >= lower_bound) & (df['column_name'] <= upper_bound))] ``` 上述命令中的 `lower_bound` 和 `upper_bound` 是设定好的上下限边界变量名,而 `column_name` 就是要检查的那个字段名称字符串形式表示法[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值