pandas常用方法

安装方法

pip install pandas

Series没有列索引

series只有行索引,没有列索引

传参方式

  • 列表、元组、array都可以直接传参
import pandas as pd
import numpy as np
data = np.array(['a','b','c','d'])
#自定义索引标签(即显示索引)
s = pd.Series(data,index=[100,101,102,103])
print(s)

效果如图:

  • 通过字典传参
import pandas as pd
import numpy as np
data = {'a' : 0., 'b' : 1., 'c' : 2.}
s = pd.Series(data,index=['b','c','d','a'])
print(s)

效果如图:

取值方式

import pandas as pd
s = pd.Series([6,7,8,9,10],index = ['a','b','c','d','e'])
print(s)
print(s['a'])#取得索引为a的值
print(s[['a','c','d']])#取得索引为a,c,d的值
print(s[s>7])#取得大于7的值
print(s[s>7].index)#取得大于7的值的索引
print(s[:3])#取得前3个值

效果如图:

Series常用属性

名称 属性
axes 以列表的形式返回所有行索引标签。
dtype 返回对象的数据类型。
empty 返回一个空的 Series 对象。
ndim 返回输入数据的维数。
size 返回输入数据的元素数量。
values 以 ndarray 的形式返回 Series 对象。
index 返回一个RangeIndex对象,用来描述索引的取值范围。

isnull()&nonull()检测缺失值

import pandas as pd
#None代表缺失数据
s=pd.Series([1,2,5,None])
print(pd.isnull(s))  #是空值返回True
print(pd.notnull(s)) #空值返回False

DataFrame

创建DataFrame

import pandas as pd
pd.DataFrame( data, index, columns, dtype, copy)
参数名称 说明
data 输入的数据,可以是 ndarray,series,list,dict,标量以及一个 DataFrame。
index 行标签,如果没有传递 index 值,则默认行标签是 np.arange(n),n 代表 data 的元素个数。
columns 列标签,如果没有传递 columns 值,则默认列标签是 np.arange(n)。
dtype dtype表示每一列的数据类型。
copy 默认为 False,表示复制数据 data。
  • 使用嵌套列表创建 DataFrame 对象
import pandas as pd
data = [['Alex',10],['Bob',12],['Clarke',13]]
df = pd.DataFrame(data,columns=['Name','Age'])#创建dataframe并设置列名
print(df)
  • 字典嵌套列表创建
import pandas as pd
data = {'Name':['Tom', 'Jack', 'Steve', 'Ricky'],'Age':[28,34,29,42]}
#设置行索引并创建dataframe
df = pd.DataFrame(data, index=['rank1','rank2','rank3','rank4'])
print(df)

筛选数据loc与iloc

  • loc
    说明
    使用loc的时候,想要多选就在[]里面再加入中括号,想要连续选的时候直接使用:号即可,行列同理。
    iloc的用法与loc类似,只不过使用数字索引。普通切片的方法也不说明了。
# 导包
import numpy as np
import pandas as pd
#创建Dataframe
data=pd.DataFrame(np.arange(25).reshape(5,5),index=list('abcde'),columns=list('ABCDE'))
print(data)
print('*'*20)
print(data.loc[['a','b'],'A'])#取得a和b两行以及A列的数据
print('*'*20)
print(data.loc['a':'c',"A":"D"])#取得a到c行以及A到D列的数据
print('*'*20)
  • 通过条件筛选(布尔索引)
import pandas as pd

# 创建一个简单的 Series
s = pd.Series([10, 20, 30, 40], index=['a', 'b', 'c', 'd'])

# 使用标签索引访问
print(s['a'])  # 输出:10
print(s['b'])  # 输出:20

# 创建一个 DataFrame
df = pd.DataFrame({
    'col1': [1, 2, 3],
    'col2': [4, 5, 6]
}, index=['row1', 'row2', 'row3'])

# 通过标签访问行
print(df.loc['row1'])  # 输出:col1    1
                       #         col2    4

# 通过标签访问列
print(df['col1'])  # 输出:row1    1
                   #         row2    2
                   #         row3    3

# 条件筛选:选出大于20的元素
print(s[s > 20])  # 输出:c    30
                  #         d    40

 # 条件筛选:选出 'col1' 中值大于 2 的行
print(df[df['col1'] > 2])
  • 筛选时使用&、|代表且和或
import pandas as pd

# 创建一个示例 DataFrame
df = pd.DataFrame({
    'col1': [1, 2, 3, 4],
    'col2': [5, 6, 7, 4]
})

# 使用 & (逻辑与)符号进行筛选,注意需要用括号括起来
result = df[(df['col1'] > 2) & (df['col2'] < 6)]

print(result)

添加、修改数据

  • 普通切片方法添加列
import pandas as pd
info=[['Jack',18],['Helen',19],['John',17]]
df=pd.DataFrame(info,columns=['name','age'])
print(df)
df['gender']=['男','男','男']#添加一列
print(df)
#通过筛选将Jack名字替换为xiaohei
df.loc[:,'name'][df['name']=='Jack']='xiaohei'
  • insert添加列
import pandas as pd
info=[['Jack',18],['Helen',19],['John',17]]
df=pd.DataFrame(info,columns=['name','age'])
print(df)
#注意是column参数
#数值1代表插入到columns列表的索引位置,注意位置是从零开始的
df.insert(1,column='score',value=[91,90,75])
print(df)
  • 删除列pop
import pandas as pd
d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
   'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd']),
   'three' : pd.Series([10,20,30], index=['a','b','c'])}
df = pd.DataFrame(d)
print ("Our dataframe is:")
print(df)
#使用pop方法删除,按列名删除
df.pop('two')
print (df)
  • 删除行
import pandas as pd
df = pd.DataFrame([[1, 2], [3, 4]], columns = ['a','b'])
df2 = pd.DataFrame([[5, 6], [7, 8]], columns = ['a','b'])
df = pd.concat([df,df2])
print(df)
#注意此处调用了drop()方法,删除行索引的名字为0的行
df = df.drop(0)
print (df)

常用参数

名称 属性&方法描述
T 行和列转置。
axes 返回一个仅以行轴标签和列轴标签为成员的列表。
dtypes 返回每列数据的数据类型。
empty DataFrame中没有数据或者任意坐标轴的长度为0,则返回True。
ndim 轴的数量,也指数组的维数。
shape 返回一个元组,表示了 DataFrame 维度。
size DataFrame中的元素数量。
values 使用 numpy 数组表示 DataFrame 中的元素值。
head() 返回前 n 行数据。
tail() 返回后 n 行数据。
shift() 将行或列移动指定的步幅长度

零碎方法

  • set_index(“列名”,inplace=True)
    设定哪一列为索引标签

  • df2.rename(columns={'ID': 'ID2'})#将df2中列名ID改为ID2

  • value_counts与sort_values

    • value_counts() 主要用于统计 Series 中每个唯一值的出现频率。它返回一个 Series,索引是原 Series 中的唯一值,值是这些唯一值在 Series 中出现的次数。

    • sort_values() 用于根据某一列(或多列)的值对 DataFrame 或 Series 进行排序。它允许你指定排序的列、排序的顺序(升序或降序),以及是否排序的过程中需要处理缺失值等。

head(),tail()就不举例了
describe()
提取所有的数字列统计结果
mean()均值
median():计算中位数
std():计算标准差
var():计算方差
sum():计算总和
min()/max():计算最小值/最大值
count():计算非缺失值的数量
•	isnull():检查缺失值(isna() 和 isnull() 功能相同)
unique():去重操作,类似于{}
dropna():丢弃缺失值
fillna():填充缺失值

转换数据类型

mport pandas as pd

# 创建一个包含浮动数的 Series
s = pd.Series([1.2, 2.5, 3.7, 4.8])
# 将 Series 转换为整数类型
s_int = s.astype(int)
print(s_int)

apply函数

注意:使用的时候,是对每个列中的元素,单独进行appl中函数的操作,但是使用参数axis=1以后,就是对一行中的数进行操作。

# 创建一个 DataFrame
import pandas as pd
df = pd.DataFrame({
    'A': [1, 2, 3],
    'B': [4, 5, 6]
})

# 使用 apply() 对每列求和
result = df.apply(lambda x: x.sum())
print(result)


#如果你设置 axis=1,则会按行进行操作。

# 使用 apply() 对每行求和
result = df.apply(lambda x: x.sum(), axis=1)
print(result)

result=df.apply(lambda x:x+1)
print(df.sum(axis=1))

groupby()分组与agg聚合操作

# 创建一个 DataFrame
df = pd.DataFrame({
    'Category': ['A', 'B', 'A', 'B', 'A'],
    'Value': [10, 20, 30, 40, 50]
})

# 按 Category 列分组,并计算 Value 的均值
grouped = df.groupby('Category')['Value'].mean()
print(grouped)

# 按 Category 分组,并同时计算均值和标准差
grouped_agg = df.groupby('Category')['Value'].agg(['mean', 'std'])
print(grouped_agg)

效果如图:

pivot_table():生成透视表

透视表用于数据汇总与聚合,类似于 Excel 中的透视表。

pandas.pivot_table(data, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All')

data: 输入的 DataFrame。
values: 需要聚合的列。
index: 用作行索引的列。
columns: 用作列索引的列。
aggfunc: 聚合函数,默认为 'mean',可以是 'sum'、'count'、'min'、'max' 等,也可以是多个函数的列表。
fill_value: 用于替换缺失值的值。
margins: 是否添加行/列的总计,默认为 False。
dropna: 是否删除全为 NaN 的列,默认为 True。
margins_name: 总计行/列的名称,默认为 'All'。

举例:

import pandas as pd



data = {
    'Date': ['2023-01-01', '2023-01-01', '2023-01-01', '2023-01-02', '2023-01-02', '2023-01-02'],
    'City': ['New York', 'Los Angeles', 'New York', 'New York', 'Los Angeles', 'Los Angeles'],
    'Temperature': [32, 75, 30, 28, 77, 80],
    'Humidity': [60, 50, 65, 70, 55, 45]
}

df = pd.DataFrame(data)
print(df)
# index='Date':将 Date 列作为行索引。

# columns='City':将 City 列作为列索引。

# values='Temperature':对 Temperature 列进行聚合。

# aggfunc='mean':计算平均值。
pivot = pd.pivot_table(df, values='Temperature', index='Date', columns='City', aggfunc='mean')
print(pivot)

pivot = pd.pivot_table(df, values=['Temperature', 'Humidity'], index='Date', columns='City', aggfunc='mean')
print(pivot)

pivot = pd.pivot_table(df, values='Temperature', index='Date', columns='City', aggfunc=['mean', 'max'])
print(pivot)

pivot = pd.pivot_table(df, values='Temperature', index='Date', columns='City', aggfunc='mean', fill_value=0)
print(pivot)

concat与merge

  • concat

举例:

import pandas as pd
df = pd.DataFrame([[1, 2], [3, 4]], columns = ['a','b'])
df2 = pd.DataFrame([[5, 6], [7, 8]], columns = ['c','b'])
df1 = pd.concat([df,df2],ignore_index=True,join='outer')
print(df1)
df1=pd.concat([df,df2],ignore_index=True,axis=1)#按列拼接
print(df1)


  • merge

说明:

merge
merge 主要用于基于某些键(key)将两个 DataFrame 按列进行合并,类似于 SQL 中的 JOIN 操作。
使用场景
当需要根据某些列的值将两个 DataFrame 合并时。
支持多种连接方式:inner、left、right、outer。

pandas.merge(left, right, how='inner', on=None, left_on=None, right_on=None, suffixes=('_x', '_y'))

left: 左侧的 DataFrame。
right: 右侧的 DataFrame。
how: 合并方式,默认为 'inner',可选值包括:
'inner': 内连接,只保留键值匹配的行。
'left': 左连接,保留左侧 DataFrame 的所有行。
'right': 右连接,保留右侧 DataFrame 的所有行。
'outer': 外连接,保留所有行,缺失值填充为 NaN。

on: 用于合并的列名(两个 DataFrame 中列名相同时)。
left_on: 左侧 DataFrame 中用于合并的列名。
right_on: 右侧 DataFrame 中用于合并的列名。
suffixes: 当两个 DataFrame 有相同列名时,用于区分列名的后缀,默认为 ('_x', '_y')。

举例:

import pandas as pd

# 左侧 DataFrame
df1 = pd.DataFrame({
    'ID': [1, 2, 3, 4],
    'Name': ['Alice', 'Bob', 'Charlie', 'David']
})

# 右侧 DataFrame
df2 = pd.DataFrame({
    'ID': [2, 3, 4, 5],
    'Age': [25, 30, 35, 40]
})

print("df1:")
print(df1)
print("\ndf2:")
print(df2)
#内连接
result = pd.merge(df1, df2, on='ID', how='inner')
print(result)
#左连接 (how='left'),以左边的数据的ID号为主,右连接同理
result = pd.merge(df1, df2, on='ID', how='left')
print(result)
#外连接 (how='outer')保留所有行,未匹配的行填充为 NaN。
result = pd.merge(df1, df2, on='ID', how='outer')
print(result)
#如果两个 DataFrame 的键列名不同,可以使用 left_on 和 right_on。
# 修改 df2 的键列名
df2 = df2.rename(columns={'ID': 'ID2'})#修改列名

# 合并
result = pd.merge(df1, df2, left_on='ID', right_on='ID2', how='inner')
print(result)

pandas字符串处理方法

pandas 提供了一些强大的工具来处理和操作字符串数据,尤其是通过 str 属性,可以方便地对 Series 中的字符串进行各种操作。下面我将介绍一些常见的字符串处理方法,包括基本的字符串操作、替换、查找、分割、正则表达式等。
注意:dataframe单独取一列也可以使用

  • str.lower() / str.upper()
import pandas as pd

# 创建 Series
s = pd.Series(['Hello', 'world', 'Python'])

# 转换为小写
print(s.str.lower())
# 转换为大写
print(s.str.upper())

剩下的就不一个个的解释了

str.title()
将字符串中的每个单词首字母大写:
print(s.str.title())


str.capitalize()
将字符串的首字母大写,其他字母小写:
print(s.str.capitalize())


str.contains()
检查字符串是否包含子字符串,返回一个布尔值的 Series:
s = pd.Series(['apple', 'banana', 'cherry', 'date'])
检查是否包含字母 'a'
print(s.str.contains('a'))


str.startswith() / str.endswith()
# 检查是否以 'a' 开头
print(s.str.startswith('a'))

检查是否以 'e' 结尾
print(s.str.endswith('e'))

str.find() / str.index()

返回子字符串首次出现的索引位置,如果找不到返回 -1(find())或抛出异常(index()):
print(s.str.find('a'))
# 或者
# print(s.str.index('a')) # 如果找不到会抛出异常

str.replace()
# 将 'a' 替换为 'A'
print(s.str.replace('a', 'A'))

str.strip() / str.lstrip() / str.rstrip()
去除字符串的左右(或单侧)空格或指定字符:

str.split()
按指定分隔符将字符串分割成多个部分

str.join()
将多个字符串拼接在一起:
print(s.str.join(', '))

str.len()
str.count()
to_datetime()
将字符串转换为日期时间格式,通常用于时间序列分析:
dates = pd.Series(['2020-01-01', '2020-02-01', '2020-03-01'])
datetime_series = pd.to_datetime(dates)

read_csv()

  • header=0表示指定第一行为列名

  • 使用 names 参数可以指定头文件的名称。
    文件标头名是附加的自定义名称,但是你会发现,原来的标头名(列标签名)并没有被删除,此时您可以使用header参数来删除它。header=0表示指定第一行为列名,然后使用names=[]来代替,就实现了使用names重新设置列名

  • index_col:将 CSV 文件中的某一列或多列设置为 DataFrame 的行索引。
    如果不指定 index_col,默认会生成一个从 0 开始的整数索引。
    可以使用数字,也可以直接使用列名

  • to_csv()
    Pandas 提供的 to_csv() 函数用于将 DataFrame 转换为 CSV 数据。如果想要把 CSV 数据写入文件,只需向函数传递一个文件对象即可。否则,CSV 数据将以字符串格式返回。

posted @ 2025-03-16 11:39  CodeCraftsMan  阅读(84)  评论(0)    收藏  举报