pandas基础学习

pandas学习

1.pandas简介与功能

Pandas 是一个功能强大的 Python 数据分析和处理工具,广泛应用于数据科学、数据分析和机器学习领域。它提供了高效的数据操作方式,用于加载、清洗、操作和分析结构化数据。

具体功能与步骤:

1.数据加载与存储

    多种数据格式读取与保存

    例如: csv,excel,sql

2.数据清洗与预处理

3.数据清洗与预处理

4.数据操作与转换

5.数据统计与分析

6.数据可视化

2.数据结构和数据类型

1.Series相关操作
2.1.创建
# 这里都是一维的才可以
s1 = pd.Series(列表/字典/ndarray,index = 索引名(要和元素个数相同))
☆Series相关问题与例子解决
例子1

s9 = np.arange(6)
s10 = pd.Series(s9)
s10,type(s9),type(s10)
  • 这里dtype的元素类型,对于都是这种基础元素会直接显示,dtype具体的类型也与环境有关系
(0    0
 1    1
 2    2
 3    3
 4    4
 5    5
 dtype: int32,	
 numpy.ndarray,	
 pandas.core.series.Series)
例子2
# 创建array(10行5列)并设置同学分数
arr1 = np.random.randint(40,101,size=(10,5))
# 创建DataFrame对象
score_df2 = pd.DataFrame(arr1)
# 设置列名
columns = ['语文','英语','数学','物理','化学']
# 设置索引行
indexs = ['同学'+ str(i) for i in range(score_df.shape[0])]
# 设置列名和索引
score_df2.columns = columns
score_df2.index = indexs
score_df2.head()
# 在pandas中object表示字符串,等价于python中的str ☆
# values其实相当于一个ndarray,所以df转ndarray(df.values)这样就可以转换了
# ndarray转df则可以直接pd.DataFrame(ndarray)
print(type(score_df2.columns[1]))
print(type(score_df2.columns))
score_df2.columns,score_df2.index,score_df2.values
  • 这里因为pandas中的object指的是字符串指的是数据(‘语文’, ‘英语’, ‘数学’, ‘物理’, ‘化学’)
<class 'str'>
<class 'pandas.core.indexes.base.Index'>
(Index(['语文', '英语', '数学', '物理', '化学'], dtype='object'),		
 Index(['同学0', '同学1', '同学2', '同学3', '同学4', '同学5', '同学6', '同学7', '同学8', '同学9'], dtype='object'),
 array([[83, 44, 65, 71, 71],
        [72, 77, 51, 62, 47],
        [71, 97, 96, 79, 92],
        [46, 80, 88, 96, 61],
        [56, 80, 98, 45, 71],
        [87, 53, 91, 41, 57],
        [66, 56, 97, 98, 53],
        [74, 74, 47, 87, 41],
        [99, 40, 70, 43, 82],
        [70, 46, 71, 82, 80]]))
例子3
# df.dtypes返回的是一个Series☆
print(type(score_df2.dtypes[1]))
print(score_df2.dtypes[1])
score_df2.dtypes[0] = 1 
print(score_df2.dtypes[0])
print(type(score_df2.dtypes))
score_df2.dtypes
  • 第一个输出因为score_df2.dtypes其实是一个Series里边的数据就是
语文    int32
英语    int32
数学    int32
物理    int32
化学    int32
因此索引1指的是英语对应的int32,也就是int32,类型对应的是<class 'numpy.dtype[int32]'>
  • 第二个是因为pandas的dtype的属性是只读的,无法直接修改
# 假设 score_df2 是一个 DataFrame,可以这样修改
score_df2['列名'] = score_df2['列名'].astype('新的类型')
  • 第三个一开始一直不理解为什么都是int32,为什么dtype是object而不是<class ‘numpy.dtype[int32]’>

因为是多个值本质是 numpy.dtype[int32],复杂的 Python 对象都被归类为object

基础数值则是直接会返回如(浮点数则都会是float)

<class 'numpy.dtype[int32]'>
int32
int32
<class 'pandas.core.series.Series'>
语文    int32
英语    int32
数学    int32
物理    int32
化学    int32
dtype: object
2.Series属性
1.创建一个例子
s5 = pd.Series([i for i in range(1,6)] , index=[i for i in 'ABCDA'])
s5
A    1
B    2
C    3
D    4
A    5
dtype: int64
2.index属性
s5.index,type(s5.index)

是索引行

(Index(['A', 'B', 'C', 'D', 'A'], dtype='object'),pandas.core.indexes.base.Index)
3.values属性
s5.values,type(s5.values)

Series的值,发现是ndarray

(array([1, 2, 3, 4, 5], dtype=int64), numpy.ndarray)
4.索引
s5['A'],s5.loc['A']

都是A索引指向的

3.DataFrame相关操作
3.1.Dataframe对象创建
# 方式1,通过字典创建
data_dict = {
    '日期' :['12-19','12-20','12-21'],
    '温度' : [0,0,-1],
    '湿度' : [50,50,50]
}
df1 = pd.DataFrame(data_dict,index=[1,2,3])
df1
# 方式2,通过列表加元组(或列表)转
mylist = [
    ['12-19',0,60],
    ['12-20',2,70],
    ('12-21',1,88),		#这里有元组有列表
]
df2 = pd.DataFrame(mylist,columns=['日期','温度','温度'])
df2
# 方式3,通过numpy的ndarray创建DataFrame对象
np.arange(15).reshape(3,5)
df = pd.DataFrame(np.zeros(15).reshape(3,5))
df

①创建时设置列名和索引

# 创建array(10行5列)并设置同学分数
arr1 = np.random.randint(40,101,size=(10,5))
# 创建DataFrame对象
score_df = pd.DataFrame(arr1)
# 设置列名
columns = ['语文','英语','数学','物理','化学']
# 设置索引行
indexs = ['同学'+ str(i) for i in range(score_df.shape[0])]

score_df = pd.DataFrame(arr1,columns=columns,index=indexs)

②创建后设置列名和索引

# 创建DataFrame对象
score_df2 = pd.DataFrame(arr1)
# 设置列名和索引
score_df2.columns = columns
score_df2.index = indexs
score_df2.head()
4.DataFrame属性
# 三个属性类似Seris
# 这里1是列名,2是索引行,值
score_df2.columns,score_df2.index,score_df2.values
(Index(['语文', '英语', '数学', '物理', '化学'], dtype='object'),
 Index(['同学0', '同学1', '同学2', '同学3', '同学4', '同学5', '同学6', '同学7', '同学8', '同学9'], dtype='object'),
 array([[83, 44, 65, 71, 71],
        [72, 77, 51, 62, 47],
        [71, 97, 96, 79, 92],
        [46, 80, 88, 96, 61],
        [56, 80, 98, 45, 71],
        [87, 53, 91, 41, 57],
        [66, 56, 97, 98, 53],
        [74, 74, 47, 87, 41],
        [99, 40, 70, 43, 82],
        [70, 46, 71, 82, 80]]))
5.DataFrame的方法
# 前n行数据默认值5
score_df2.head(n)
# 后n行数据,默认5
score_df2.tail(n)
# 看统计信息
score_df2.describe()
# 看详细信息 ☆
score_df2.info()

这是具体信息

<class 'pandas.core.frame.DataFrame'>
Index: 10 entries, 同学0 to 同学9
Data columns (total 5 columns):
 #   Column  Non-Null Count  Dtype
---  ------  --------------  -----
 0   语文      10 non-null     int32
 1   英语      10 non-null     int32
 2   数学      10 non-null     int32
 3   物理      10 non-null     int32
 4   化学      10 non-null     int32
dtypes: int32(5)
memory usage: 580.0+ bytes

pandas常用方法

1.转置

df.T

2.增加列

# 索引不能只改一个,只能改全部,这里这个操作相当于增加一列
# 下面的操作就是创建一个同学2列名下全设置为'stu2'
# score_df2['同学2'] = 'stu2'
# 这里我们在删除掉 axis 0是行,1是列
# score_df2.drop('同学2',axis=1,inplace=True)
score_df2

3.设置索引列

df = pd.DataFrame(
    {
        'month':[1,4,7,10],
        'sale':[55,54,57,50],
        'year':[2012,2013,2014,2015],
    }
)
# inplace会影响源数据
# df.set_index('month',inplace=True)
# drop默认True,会删除列放到索引的列,移到另一个位置
df.set_index('month',drop=True).reset_index(drop=False)

set_index(drop默认为True)

# 当reset后仍然可以接着重构先是会index,然后level_0,就不可了
df.reset_index(inplace=True)
df
(drop = False)时会将索引转到列名中,索引填入0,1,...
设为True时直接扔掉

执行两次reset_index(drop默认为False)可以不断的将索引放到列名中

在这里插入图片描述

3.设置多列索引

# 设置多列索引
df.set_index(['year','month'])
MultiIndex([(2012,  1),
            (2013,  4),
            (2014,  7),
            (2015, 10)],
           names=['year', 'month'])

会设置year和month都是索引

4.Pandas的数据类型

df或s对象中具体每一个值的数据类型有很多,如下表所示

Pandas数据类型说明对应的Python类型
Object字符串类型string
int整数类型int
float浮点数类型float
datetime日期时间类型datetime包中的datetime类型
timedelta时间差类型datetime包中的timedelta类型
category分类类型无原生类型,可以自定义
bool布尔类型bool(True,False)
nan空值类型None

1.category类型

类型用于分类数据,通常用于有限的集合的类型,如:颜色,种类,优点在于占用更少的内存,并对分类操作更快

# 在创建df或s时,astype和dtype设置
fruits = pd.Series([1,'1','2','3','5','2'],dtype='category')
print(fruits)
0    1
1    1
2    2
3    3
4    5
5    2
dtype: category
Categories (5, object): [1, '1', '2', '3', '5']

2.datetime和timedelta类型

# DatetimeIndex类型(pandas 中专门处理时间序列数据的索引类型)
date1 = pd.to_datetime(['2024-12-21','2024-12-22','2024-12-23'])
# Timestamp是 pandas 对 datetime 对象的封装,本质是datetime类型的对象
date2 = pd.to_datetime('2024-12-21')
print(date1[0])
date1,type(date1),date2,type(date2),date2-date1 # 返回TimedeltaIndex其中每个元素是一个 Timedelta 对象,表示两个日期之间的差异
2024-12-21 00:00:00
(DatetimeIndex(['2024-12-21', '2024-12-22', '2024-12-23'], dtype='datetime64[ns]', freq=None),
 pandas.core.indexes.datetimes.DatetimeIndex,
 Timestamp('2024-12-21 00:00:00'),
 pandas._libs.tslibs.timestamps.Timestamp,
 TimedeltaIndex(['0 days', '-1 days', '-2 days'], dtype='timedelta64[ns]', freq=None))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值