pandas基本功能

本文介绍Pandas库在数据处理中的应用,涵盖数据读取、筛选、统计等核心功能,并详解NaN处理、数学统计方法、相关系数计算等内容。

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

import pandas as pd
import numpy as np
 pandas基本功能

(1)数据文件读取/文本数据读取

(2)索引、选取和数据过滤

(3)算法运算和数据对齐

(4)函数的应用和映射

(5)重置索引

1、pandas:数据文件读取

通过pandas提供的read_xxx相关的函数可以读取文件中的数据,并形成DataFrame,常用的数据读取方法为:read_csv,主要可以读取文本类型的数据

# 读取csv文件:表格型的文本数据
df=pd.read_csv("text.csv",encoding='gbk')

df
 名字数学语文
0Dkd25.198
1Hff26.090
2Zfs27.087
3Lghgd \t28.097
#读取text文件,sep指定分隔符,不读取头部数据 。默认使用逗号的形式分割
df1=pd.read_csv("text1.txt",encoding='gbk',sep=' ',header=None)

df1
 012
0名字数学语文
1Dkd25.198
2Hff26.090
3Zfs27.087
4Lghgd28.097
2、pandas:数据过滤获取

通过DataFrame的相关方式可以获取对应的列或者数据形成一个新的DataFrame, 方便后续进行统计计算。

# 数据过滤获取
columns=["age","name","历史","数学","语文"]
dit={'name':['Dfg','Cfg','Cfg','Mel'],
'age':[12,13,14,15],
'语文':[np.nan,99,97,90],
'数学':[78,89,89,90],
'历史':[90,98,97,96]}
df2=pd.DataFrame(dit,index=['one','two','three','four'])
df2
 agename历史数学语文
one12Dfg9078NaN
two13Cfg988999.0
three14Cfg978997.0
four15Mel969090.0
df3=df2[columns[2:4]]

df3
 历史数学
one9078
two9889
three9789
four9690
df3=df2.dropna()

df3
 agename历史数学语文
two13Cfg988999.0
three14Cfg978997.0
four15Mel969090.0
3、pandas:缺省值NaN处理方法

(1)dropna:根据标签的值中是否存在缺失数据对轴标签进行过滤(删除), 可以通过阈值的调节对缺失值的容忍度

(2)fillna:用指定值或者插值的方式填充缺失数据,比如: ffill或者bfill

(3)isnull:返回一个含有布尔值的对象,这些布尔值表示那些值是缺失值NA

(4)notnull:isnull的否定式

dit1={'name':['Dfg','Cfg','Zvb','Mel'],
'age':[12,np.nan,14,15],
'语文':[np.nan,99,97,90],
'数学':[78,89,np.nan,90],
'历史':[90,98,97,np.nan]}
df4=pd.DataFrame(dit1,index=['one','two','three','four'])
df4
 agename历史数学语文
one12.0Dfg90.078.0NaN
twoNaNCfg98.089.099.0
three14.0Zvb97.0NaN97.0
four15.0MelNaN90.090.0
# 为NaN的值设置为True

df4.isnull()
 agename历史数学语文
oneFalseFalseFalseFalseTrue
twoTrueFalseFalseFalseFalse
threeFalseFalseFalseTrueFalse
fourFalseFalseTrueFalseFalse
# 为NaN的值设置为Faulse

df4.notnull()
 agename历史数学语文
oneTrueTrueTrueTrueFalse
twoFalseTrueTrueTrueTrue
threeTrueTrueTrueFalseTrue
fourTrueTrueFalseTrueTrue
# 默认删除包含缺失值的行

df4.dropna()
# 默认删除全部为缺失值的行

df4.dropna(how='all')
 agename历史数学语文
one12.0Dfg90.078.0NaN
twoNaNCfg98.089.099.0
three14.0Zvb97.0NaN97.0
four15.0MelNaN90.090.0
# 默认删除缺失值的列

df4.dropna(axis=1)
 name
oneDfg
twoCfg
threeZvb
fourMel
df4.dropna(axis=1,thresh=3)

 agename历史数学语文
one12.0Dfg90.078.0NaN
twoNaNCfg98.089.099.0
three14.0Zvb97.0NaN97.0
four15.0MelNaN90.090.0
df5=pd.DataFrame(np.random.randn(7,3))
df5.ix[:4,1]=np.nan
df5.ix[3:4,2]=np.nan
df5.ix[[1,2],0]=np.nan
 df5 
 012
00.555112NaN0.043554
11.285995NaN-0.907715
2-1.348955NaN-1.285340
31.864293NaNNaN
40.931731NaNNaN
5-0.012471-1.0535311.240825
60.806216-1.9604560.905550
df5.fillna(0)

 012
00.5551120.0000000.043554
11.2859950.000000-0.907715
2-1.3489550.000000-1.285340
31.8642930.0000000.000000
40.9317310.0000000.000000
5-0.012471-1.0535311.240825
60.806216-1.9604560.905550
df5.fillna({1:0.5,2:-1,0:1})

 012
00.5551120.5000000.043554
11.2859950.500000-0.907715
2-1.3489550.500000-1.285340
31.8642930.500000-1.000000
40.9317310.500000-1.000000
5-0.012471-1.0535311.240825
60.806216-1.9604560.905550
4、常用的数学统计方法

count:计算非NaN值的数量

describe:针对series和dataframe的各列计算总统计值

min/max:计算最大值和最小值

argmin/argmax:计算能够获取到最大值、最小值的索引值(整数)

quantile:计算样本的分位数0-1

sum:值得和

mean:值得平均值

median:值中位数

mad:根据平均值计算平均绝对距离差

var:样本数值的方差

std:样本数值的标准差

cumsum:样本值的累积和

cummin/summax:样本的累积最大值、最小值

cumprod:样本值的累计积

pct_change:计算百分数的变化

df3=df2.dropna()
print("========================================")
print(df3)
print("========================================")
print(df3.describe())
print("========================================")
print(df3.var())
print("========================================")
print(df3.sum())
print("========================================")
print(df3.cumsum())
print("========================================")
# print(df3.cumprod())
========================================
       age name  历史  数学    语文
two     13  Cfg  98  89  99.0
three   14  Cfg  97  89  97.0
four    15  Mel  96  90  90.0
========================================
        age    历史         数学         语文
count   3.0   3.0   3.000000   3.000000
mean   14.0  97.0  89.333333  95.333333
std     1.0   1.0   0.577350   4.725816
min    13.0  96.0  89.000000  90.000000
25%    13.5  96.5  89.000000  93.500000
50%    14.0  97.0  89.000000  97.000000
75%    14.5  97.5  89.500000  98.000000
max    15.0  98.0  90.000000  99.000000
========================================
age     1.000000
历史      1.000000
数学      0.333333
语文     22.333333
dtype: float64
========================================
age            42
name    CfgCfgMel
历史            291
数学            268
语文            286
dtype: object
========================================
      age       name   历史   数学   语文
two    13        Cfg   98   89   99
three  27     CfgCfg  195  178  196
four   42  CfgCfgMel  291  268  286
========================================
5、pandas:相关系数与协方差
dit={'age':[12,13,14,15],
'语文':[np.nan,99,97,90],
 '数学':[78,89,89,90],
'历史':[90,98,97,96]}
df7=pd.DataFrame(dit,index=['one','two','three','four'])
df7
 age历史数学语文
one129078NaN
two13988999.0
three14978997.0
four15969090.0
# 相关系数

df7.corr()
 age历史数学语文
age1.0000000.6106580.817338-0.952217
历史0.6106581.0000000.9541880.952217
数学0.8173380.9541881.000000-0.977356
语文-0.9522170.952217-0.9773561.000000
# 协方差

df7.cov()
 age历史数学语文
age1.6666672.8333336.000000-4.500000
历史2.83333312.91666719.5000004.500000
数学6.00000019.50000032.333333-2.666667
语文-4.5000004.500000-2.66666722.333333
6、pandas:唯一值、值计数以及成员资格

(1)unique方法用于获取Series中的唯一值数组(去重数据后的数组)

(2)value_counts方法用于计算一个Series中各值的出现频率

(3)isin方法用于判断矢量化集合的成员资格,可用于选取Series中或者DataFrame中列中数据的子集

# df7.unique()错误使用方法,对于dataframe必须要指定是哪一列,对于series可以直接使用unique
df7["数学"].unique()
array([78, 89, 90], dtype=int64)
# df7.value_counts()错误使用方法,对于dataframe必须要指定是哪一列,对于series可以直接使用value_counts
# df7.value_counts()
df7["数学"].value_counts()
89    2
78    1
90    1
Name: 数学, dtype: int64
mask=[89,90]
print(df7.isin(mask))
print("========================================")
print(df7[df7.isin(mask)])
         age     历史     数学     语文
one    False   True  False  False
two    False  False   True  False
three  False  False   True  False
four   False  False   True   True
========================================
       age    历史    数学    语文
one    NaN  90.0   NaN   NaN
two    NaN   NaN  89.0   NaN
three  NaN   NaN  89.0   NaN
four   NaN   NaN  90.0  90.0
7、pandas:层次索引

(1)在某一个方向拥有多个(两个及两个以上)索引级别

(2)通过层次化索引,pandas能够以较低维度形式处理高纬度的数据

(3)通过层次化索引,可以按照层次统计数据

(4)层次索引包括Series层次索引和DataFrame层次索引

# series的层次索引
data=pd.Series([989.44,987,934,9245,7824],
index=[
 ['2001','2001','2001','2002','2002'],
["苹果","香蕉","西瓜","苹果","西瓜"]
 ])
data
2001  苹果     989.44
      香蕉     987.00
      西瓜     934.00
2002  苹果    9245.00
      西瓜    7824.00
dtype: float64
# 第一层索引
data['2001']

苹果    989.44
香蕉    987.00
西瓜    934.00
dtype: float64
# 第二层索引
# 通过data['2001']获取的数据还是series类型,所以可以使用索引或者下标的方式获取响应的值
data['2001']['苹果':'香蕉']
# data['2001'][0:1]
苹果    989.44
香蕉    987.00
dtype: float64
data['2001':'2002']

2001  苹果     989.44
      香蕉     987.00
      西瓜     934.00
2002  苹果    9245.00
      西瓜    7824.00
dtype: float64
# dataframe的层次索引
dic={"year":[2001,2001,2002,2002,2003],
 "fruit":['apple','banana','apple','banana','apple'],
"prodution":[123,144,5556,768,7977],
"profite":[567,876,978,243,123]}
dfa=pd.DataFrame(dic)
dfa
 fruitprodutionprofiteyear
0apple1235672001
1banana1448762001
2apple55569782002
3banana7682432002
4apple79771232003
# 将year作为一级索引,将fruit作为二级索引
dfa.set_index=["year","fruit"]

dfa
  produtionprofite
yearfruit  
2001apple123567
banana144876
2002apple5556978
banana768243
2003apple7977123
# 获取一列

dfa['prodution']
year  fruit 
2001  apple      123
      banana     144
2002  apple     5556
      banana     768
2003  apple     7977
Name: prodution, dtype: int64
dfa.ix[2001]
 produtionprofite
fruit  
apple123567
banana144876
dfa.ix[2001,'apple']

prodution    123
profite      567
Name: (2001, apple), dtype: int64
dfa.ix[2001:2002]
  produtionprofite
yearfruit  
2001apple123567
banana144876
2002apple5556978
banana768243
dfa.ix[2001:2002]["prodution"]

year  fruit 
2001  apple      123
      banana     144
2002  apple     5556
      banana     768
Name: prodution, dtype: int64
# 按照层次索引进行统计数据
# dfa.sum(level='year')

dfa.sum(level='fruit')
 produtionprofite
fruit  
apple136561668
banana9121119
dfa.min(level=['year','fruit'])

  produtionprofite
yearfruit  
2001apple123567
banana144876
2002apple5556978
banana768243
2003apple7977123
### Pandas基本函数及其用法 Pandas 是一种强大的数据分析工具库,广泛应用于数据处理和分析领域。以下是几个常用的基本函数以及它们的具体用法。 #### 1. `pandas-log` 的功能介绍 为了更好地理解 Pandas 中的操作行为,可以借助第三方扩展包 **pandas-log** 来提供操作反馈日志[^1]。该工具通过封装常见的 Pandas 函数,在执行过程中记录额外的日志信息,帮助开发者更清晰地追踪每一步的数据变化过程。 安装方式如下: ```bash pip install git+https://gitcode.com/gh_mirrors/pa/pandas-log.git ``` 使用示例: ```python import pandas as pd from pandas_log import log_dataframe_operations df = pd.DataFrame({'A': [1, 2], 'B': [3, 4]}) log_df = log_dataframe_operations(df) # 执行任意 Pandas 操作时会自动打印日志 filtered_df = log_df[log_df['A'] > 1] print(filtered_df) ``` --- #### 2. 遍历 DataFrame 行的方法——`iterrows()` 和其他替代方案 Pandas 提供了多种方法用于遍历 DataFrame 数据中的行,其中最常见的是 `iterrows()` 方法[^2]。它能够逐行返回索引和对应的 Series 对象。然而需要注意的是,由于其性能较低,通常不推荐在大规模数据集上频繁调用此方法。 代码示例: ```python import pandas as pd data = {'Column_A': ['X', 'Y'], 'Column_B': [10, 20]} df = pd.DataFrame(data) for idx, row in df.iterrows(): print(f"Index: {idx}, Row Data: {row}") ``` 除了 `iterrows()` 外,还有更高效率的选择比如 `itertuples()` 或者基于向量化运算的 `apply()` 方法。这些方法更适合于需要高性能计算场景下的应用需求。 --- #### 3. 统计描述性信息——`describe()` 函数 对于初步探索数据分布情况而言,`describe()` 是非常实用的一个内置统计汇总命令[^3]。它可以快速生成数值型字段的关键指标(如均值、标准差等),同时也支持自定义参数调整输出范围。 实例演示: ```python sample_data = { 'Scores': [85, 90, None], 'Hours_Studied': [5, 7, 6] } frame = pd.DataFrame(sample_data) summary_stats = frame.describe() print(summary_stats) ``` 注意:如果目标是非数值类型的列,则需显式指定包含选项才能获取相应频率统计等内容。 --- #### 4. 修改列名大小写形式 有时我们可能希望统一表头命名风格以便后续加工处理更加方便一致化管理。下面展示如何利用列表推导表达式实现将现有所有列的名字转换成首字母大写的样式: 样例脚本: ```python raw_columns = ["first_name", "last_name"] cleaned_cols = [col.capitalize() for col in raw_columns] example_dataset = pd.DataFrame({ "first_name": ["John"], "last_name": ["Doe"] }) example_dataset.columns = cleaned_cols print(example_dataset.head()) ``` 上述逻辑同样适用于批量重命名复杂模式匹配条件下多级索引结构等情况。 --- #### 5. 布尔索引筛选特定条件子集 布尔掩码技术允许用户依据某些预设规则轻松提取满足要求的部分记录集合出来单独查看或者进一步深入挖掘潜在规律特性。具体做法就是先创建一个与原始表格形状相同的 True/False 数组作为过滤器作用到原对象之上即可完成整个流程自动化构建工作流简化步骤提升工作效率减少人为错误发生几率增加程序可读性和维护便利程度等方面都有显著优势体现价值所在之处值得推广普及开来让更多人受益匪浅! 简单例子说明如下所示: ```python criteria_mask = (frame['Scores'] >= 88) & (~pd.isnull(frame['Hours_Studied'])) qualified_records = frame.loc[criteria_mask] print(qualified_records) ``` 这里特别强调一点即当涉及到多个并联关系组合查询语句编写时候记得合理运用括号分隔开各个部分优先顺序从而避免语法解析歧义现象产生影响最终结果准确性造成不必要的麻烦困扰等问题出现。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值