Python数据分析(01)pandas使用

本文深入讲解Pandas库的三种核心数据结构:Series、DataFrame和Panel的创建与操作方法,涵盖描述性统计、函数应用、索引重建及迭代排序等功能,适合希望提升数据处理技能的开发者。

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

一、pandas的三种数据结构

1、系列(Series)

  • 系列(Series)是能够保存任何类型的数据(整数,字符串,浮点数,Python对象等)的一维标记数组。轴标签统称为索引。
系列的创建

pandas.Series( data, index, dtype, copy)

namedes
data数据采取的各种形式:数组、列表、标量、字典等
index指定索引,不使用默认的
dtype指定数据类型,没有指定就自己推断
copy复制数据,默认为 false
  • 从 ndarray 创建一个系列
import pandas as pd
import numpy as np
data = np.array(['a','b','c','d'])
s = pd.Series(data)
print (s)

data = np.array(['a','b','c','d'])
s = pd.Series(data,index=[100,101,102,103])
print (s)
  • 从字典创建一个系列
#默认用键作为索引,当然也是可以指定的
data = {'a' : 0., 'b' : 1., 'c' : 2.}
s = pd.Series(data)
print (s)
  • 从列表创建一个系列
s = pd.Series([1,2,3,4,5],index = ['a','b','c','d','e'])
print (s)
  • 从标量创建一个系列
s = pd.Series(5, index=[0, 1, 2, 3])
print (s)
系列数据的访问
  • 通过索引访问:就跟数组一样,还支持切片
import pandas as pd
s = pd.Series([1,2,3,4,5],index = ['a','b','c','d','e'])
print s[0]
print s[:3] #切片
  • 通过标签检索:有点像字典
import pandas as pd
s = pd.Series([1,2,3,4,5],index = ['a','b','c','d','e'])
print s['a']
print s[['a','c','d']] #检索多个

2、数据帧(DataFrame)

  • 数据帧是二维数据结构,即数据以行和列的表格方式排列,可以和数据库中的数据表无缝接合
  • pandas.DataFrame( data, index, columns, dtype, copy)
data可以是ndarray,series,map,lists,dict,constant和另一个DataFrame。
index行标签,默认就是0、1、2、3…
columns列标签,默认就是0、1、2、3…
创建 DataFrame
  • 从列表创建
import pandas as pd
data = [1,2,3,4,5]
df = pd.DataFrame(data)
print df

data = [['Alex',10],['Bob',12],['Clarke',13]]
df = pd.DataFrame(data,columns=['Name','Age'],dtype=float)
print df

df = pd.DataFrame([{'a':12,'b':34},{'a':34,'b':67,'c':56}])
print(df)
  • 从字典创建
df = pd.DataFrame({"name":['mike','allen'],"age":[12,34]},index=['h2','h2'])
print(df)

d = {'one':pd.Series([1,2,3],index=['a','b','c']),'two':pd.Series([1,2,3,4],index=['a','b','c','d'])}
df = pd.DataFrame(d)
print(df)
操作 DataFrame
  • 列的选择、添加和删除
d = {'one':pd.Series([1,2,3],index=['a','b','c']),'two':pd.Series([1,2,3,4],index=['a','b','c','d'])}
df = pd.DataFrame(d)
#列的选择
print(df['two'])
#列的添加
df['three'] = pd.Series([10,20,30,40],index=['a','b','c','d'])
df['four'] = df['two']+df['three']
print(df)
#列的删除
del df['one']
print(df)
df.pop('two')
print(df)
  • 行的选择、添加和删除
d = {'one':pd.Series([1,2,3],index=['a','b','c']),'two':pd.Series([1,2,3,4],index=['a','b','c','d'])}
df = pd.DataFrame(d)
df2 = pd.DataFrame({'one':6,'two':6},index=['haha'])
#添加一行
df = df.append(df2)
#删除一行
df = df.drop('a')
df
#选择一行
print(df.loc['b'])
print(df.iloc[1])
#行切片
print(df[1:3])

3、面板(Panel)

  • 使用测试中出现提示:Panel is deprecated and will be removed in a future version
  • 官方不推荐用面板了,不要学了

二、pandas基本功能 | 描述性统计 | 函数应用 | 重建索引

1、基本功能

系列基本功能
属性或方法描述
axes返回行轴标签列表。
dtype返回对象的数据类型(dtype)。
empty如果系列为空,则返回True。
ndim返回底层数据的维数,默认定义:1。
size返回基础数据中的元素数。
values将系列作为ndarray返回。
head()返回前n行。
tail()返回最后n行。
数据帧基本功能
属性或方法描述
T转置行和列。
axes返回一个列,行轴标签和列轴标签作为唯一的成员。
dtypes返回此对象中的数据类型(dtypes)。
empty如果NDFrame完全为空[无项目],则返回为True; 如果任何轴的长度为0。
ndim轴/数组维度大小。
shape返回表示DataFrame的维度的元组。
sizeNDFrame中的元素数。
valuesNDFrame的Numpy表示。
head()返回开头前n行。
tail()返回最后n行。

2、描述性统计

函数描述
count()非空观测数量
sum()所有值之和
mean()所有值的平均值
median()所有值的中位数
mode()值的模值
std()值的标准偏差
min()所有值中的最小值
max()所有值中的最大值
abs()绝对值
prod()数组元素的乘积
cumsum()累计总和
cumprod()累计乘积
  • sum(),cumsum() 可以作用于字符,但是没有意义;abs(),cumprod()作用于字符串的话会报错
  • describe(include='all')函数是用来计算有关DataFrame列的统计信息的摘要,其中的 include 参数可以取值:
    • object - 汇总字符串列
    • number - 汇总数字列
    • all - 将所有列汇总在一起(不应将其作为列表值传递)
import pandas as pd
#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Minsu','Jack',
   'Lee','David','Gasper','Betina','Andres']),
   'Age':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
   'Rating':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])}
#Create a DataFrame
df = pd.DataFrame(d)
df.describe()

3、函数应用

表合理函数应用:pipe
import pandas as pd
import numpy as np

def adder(ele1,ele2):
    return ele1+ele2

df = pd.DataFrame(np.random.randint(1,10,size=(5,3)),columns=['col1','col2','col3'])
df = df.pipe(adder,100)
df
行或列函数应用:apply
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randint(1,10,size=(5,3)),columns=['col1','col2','col3'])
df = df.apply(lambda x: x.max() - x.min(),axis=1)
df
元素函数应用:applymap
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randint(1,10,size=(5,3)),columns=['col1','col2','col3'])
#针对表格所有元素
df= df.applymap(lambda x:x*100)
print(df)
#只针对某一列
df= df['col1'].map(lambda x:x*100)
print(df)

4、重建索引

  • 重建索引有很多用途:
通过重建索引来重构表格
import pandas as pd
import numpy as np

N=20
df = pd.DataFrame({
   'A': pd.date_range(start='2016-01-01',periods=N,freq='D'),
   'x': np.linspace(0,stop=N-1,num=N),
   'y': np.random.rand(N),
   'C': np.random.choice(['Low','Medium','High'],N).tolist(),
   'D': np.random.normal(100, 10, size=(N)).tolist()
})
#reindex the DataFrame
df_reindexed = df.reindex(index=[0,2,5], columns=['A', 'C', 'B'])
print (df_reindexed)

重建索引与其他对象对齐
import pandas as pd
import numpy as np

df1 = pd.DataFrame(np.random.randn(10,3),columns=['col1','col2','col3'])
df2 = pd.DataFrame(np.random.randn(7,3),columns=['col1','col2','col3'])

df1 = df1.reindex_like(df2)
print (df1)
重建索引时的填充
  • reindex 是一个填充方法,可选参数如下:
    • pad/ffill - 向前填充值
    • bfill/backfill - 向后填充值
    • nearest - 从最近的索引值填充
import pandas as pd
import numpy as np

df1 = pd.DataFrame(np.random.randn(6,3),columns=['col1','col2','col3'])
df2 = pd.DataFrame(np.random.randn(2,3),columns=['col1','col2','col3'])

# 默认用NAN填充所有
print df2.reindex_like(df1)

# 用前面的最后数据只填充一行
print ("--------------------------------------")
print df2.reindex_like(df1,method='ffill',limit=1)
重命名行列标签
import pandas as pd
import numpy as np

df1 = pd.DataFrame(np.random.randn(6,3),columns=['col1','col2','col3'])
print (df1)

print ("------------------------------------")
print (df1.rename(columns={'col1' : 'c1', 'col2' : 'c2'},index = {0 : 'apple', 1 : 'banana', 2 : 'durian'}))

三、pandas 迭代和排序

1、迭代:iteritems、iterrows、itertuples

按列迭代
import pandas as pd
import numpy as np

N=20
df = pd.DataFrame({
    'A': pd.date_range(start='2016-01-01',periods=N,freq='D'),
    'x': np.linspace(0,stop=N-1,num=N),
    'y': np.random.rand(N),
    'C': np.random.choice(['Low','Medium','High'],N).tolist(),
    'D': np.random.normal(100, 10, size=(N)).tolist()
    })
# 默认是遍历列名
for col in df:
    print (col)
    
df = pd.DataFrame(np.random.randn(4,3),columns=['col1','col2','col3'])
print(df)
print("--------------------")
for key,value in df.iteritems():
    print (key,value)
    print("-----")
按行迭代
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(4,3),columns = ['col1','col2','col3'])
print(df)
print("-------------------------")
for row_index,row in df.iterrows():
    print (rowindex,row)
    print("---------")

#每一行返回一个产生一个命名元组的迭代器
df = pd.DataFrame(np.random.randn(4,3),columns = ['col1','col2','col3'])
for row in df.itertuples():
    print(row)

2、排序

按标签排序:sort_index
import pandas as pd
import numpy as np

unsorted_df = pd.DataFrame(np.random.randn(10,2),index=[1,4,6,2,3,5,9,8,0,7],columns = ['col2','col1'])
print(unsorted_df)
print("-------------------------")
sorted_df=unsorted_df.sort_index(ascending=True)  # ascending 指定升序排列
print (sorted_df)
按列排列:sort_index
import pandas as pd
import numpy as np

unsorted_df = pd.DataFrame(np.random.randn(10,2),index=[1,4,6,2,3,5,9,8,0,7],columns = ['col2','col1'])
print(unsorted_df)
sorted_df=unsorted_df.sort_index(axis=1) #默认是0,就是根据行标签排序
print (sorted_df)
按值排序:sort_values
  • 其中 kind 指定的是算法,本来有三个可选的值,但是 mergesort 是比较稳定的算法
  • 先根据 col1 排序,再根据 col2 排序
import pandas as pd
import numpy as np

unsorted_df = pd.DataFrame({'col1':[2,1,1,1],'col2':[1,3,2,4]})
print(unsorted_df)
sorted_df = unsorted_df.sort_values(by=['col1','col2'],kind='mergesort')
print (sorted_df)

四、字符串操作 | 选项设置 | 索引访问数据

1、字符串操作

  • 操作示例
s = pd.Series(['Tom', 'William Rick', 'John', 'Alber@t', np.nan, '1234','SteveMinsu'])
print (s.str.lower())
  • 常用方法
    在这里插入图片描述

2、选项设置

3、索引访问数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值