python数据分析:pandas统计分析之Series和DataFrame

http://b.zhr66.cn/1/pycharm/

目录

一.Series 类型数据

1.Series创建

2.元素不同处:

3.图解

4.与字典

5.统计方法

二. DataFrame类型数据

2.数据选择和过滤

2.1数据排序

3.数据聚合

   3.1DataFrame的高级技巧

4.数据透视表

5.缺失数据处理

6.数据合并

三.结论


前言

Pandas是Python中用于数据分析和处理的重要库。其中,Series和DataFrame是Pandas中最常用的两种数据结构。

Series是一种类似于一维数组的数据结构,在Pandas中用于存储一列数据,其中每个元素都有一个唯一的标签,可以通过这个标签进行访问。Series可以存储不同类型的数据,如整数、浮点数和字符串等,可以被看作是一个带标签的数组。

DataFrame是Pandas中的另一种重要数据结构,它是一个二维的表格,可以存储不同类型的数据。DataFrame中的每一列都是一个Series对象,在DataFrame中每列的数据类型可以不同

一.Series 类型数据

Series是Pandas的核心数据结构之一,也是理解高阶数据结构DataFrame的基础。下面我们来详细探讨Series的相关概念及常见操作。

1.Series创建

Series 是一种类似于一维数组的数据结构,是由一组数据及与之对应的标签(即索引)构成的。

创建Series的语法非常简单

pd.Series(data, index = index)
  • 在上述构造方法的参数中,data就是数据源,其类型可以是一系列的整数、字符串,也可是浮点数或某类Python对象。
  • 默认索引就是数据的标签(label),代码如下所示
  • import pandas as pd
    a = pd.Series([1,5,3,-5]) #创建一个对象
    print(a)
  • 运行结果
  • 0    1
    1    5
    2    3
    3   -5
    dtype: int64

数据源可以用列表来填充。二者有相似之处,它们内部都包括一系列的数据。

2.元素不同处

列表内的元素可以是相同类型的,也可以是不同类型的,也就是说列表中的元素是“大杂烩”。

Series依赖于NumPy中的N维数组(ndarray)而构建,因此,其内部的数据要整齐划一,数据类型必须相同。

Series增加对应的标签(label)作为索引。如果没有显式添加索引,Python会自动添加一个0 ~ n-1内的索引值(n为Series对象内含元素的个数)。

3.图解

通常的视图是索引在左,数值在右。如下图

# 绘制Series图形

series.plot(kind='bar')
plt.title('Series图解')
plt.xlabel('类别')
plt.ylabel('值')
plt.show()

结果

  • Series是一种自带标签的一维数组(one-dimensional labeled array)。

我们可以通过Series的index和values属性,分别获取索引和数组元素值。

import pandas as pd
a = pd.Series([2,0,-4,12]) # 创建一个对象
#print(a)

print(a.values) # 获取Serirs的元素值
print(a.index) # 获取索引 range(4)
  • 运行结果
[ 2  0 -4 12]
RangeIndex(start=0, stop=4, step=1)

在创建Series对象时,其标签不必是0~n-1内的数字,它也可以被显式指定为其他类型,甚至可在创建索引后被二次修改,代码如下所示。

import numpy as np
import pandas as pd
a = pd.Series([2,0,-4,12]) # 创建一个对象
#print(a)

s = pd.Series(np.random.randn(5), index=['a', 'b', 'c', 'd','e']) # NumPy数组为数据原 , 指定索引

print(s)
print(s.values) # 数据
print(s.index) # 索引

s.index = ['one', 'two', 'Three', 'Four', 'Five']
print(s)
  • 运行结果
a   -0.955206
b    0.989406
c   -0.192764
d    0.163198
e    0.774941
dtype: float64

[-0.95520564  0.98940556 -0.19276389  0.16319846  0.77494127]

Index(['a', 'b', 'c', 'd', 'e'], dtype='object')

one     -0.955206
two      0.989406
Three   -0.192764
Four     0.163198
Five     0.774941
dtype: float64

Series与Python中的字典颇有相似之处。的确如此,Series中的index可对应字典中的key, Series中的value与字典中的value相同。

4.与字典

因此,Series也可以由现有的字典数据类型通过“打包”来创建,代码如下所示。

Dict = {'a':1, 'b':2, 'c':3, 'd':4} # 定义字典
temp = pd.Series(Dict) # 将字典作为数据原 没有index
print(temp)
  • 运行结果
a    1
b    2
c    3
d    4
dtype: int64

由于字典中的key可以“对标”Series中的index,两者都起到快速定位数据的作用,所以无须单独设置Series所需的index参数。 如果Pandas中的Series与Python中的字典完全一样,那么Series就没有存在的必要了。

言外之意就是,它与字典还是有不同之处的。

数据类型index和value之间key/index
字典无序不可变
Series有序相互独立的可变

5.统计方法

Series还提供了简单的统计方法:describe()方法为以列为单位进行统计分析,示例代码如下。

Dict = {'a':1, 'b':2, 'c':3, 'd':4} # 定义字典
temp = pd.Series(Dict) # 将字典作为数据原 没有index


print(temp.describe())
结果
count    4.000000
mean     2.500000
std      1.290994
min      1.000000
25%      1.750000
50%      2.500000
75%      3.250000
max      4.000000
dtype: float64
一般情况下,describe()只对数值型的列进行统计分析。如下图
名称含义
count一列数据的个数
mean一列数据的均值
std一列数据的均方差
min一列数据中的最小值
max一列数据中的最大值
25%一列数据中前~的数据的分位数

二. DataFrame类型数据

DataFrame是Pandas库中最常用的数据结构之一,它可以看作是一种二维的表格数据结构,类似于电子表格或关系型数据库中的表。DataFrame由行和列组成,每一列可以包含不同的数据类型,例如整数、浮点数、字符串等。以下是一个创建DataFrame的示例:

import pandas as pd

# 创建DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
        'Age': [25, 30, 35, 40],
        'City': ['New York', 'London', 'Paris', 'Tokyo']}

df = pd.DataFrame(data)

在这个示例中,我们使用一个字典来定义数据,其中字典的键表示列名,字典的值表示对应列的数据。通过调用pd.DataFrame()函数并传入字典,我们可以创建一个简单的DataFrame对象。

DataFrame的常用操作

DataFrame提供了丰富的操作和方法,用于数据的选择、过滤、排序、聚合等。以下是一些常用的DataFrame操作示例:

2.数据选择和过滤

DataFrame提供了多种方式来选择和过滤数据,例如按列名、按行索引、按条件等。以下是一些常见的数据选择和过滤操作示例:

# 选择单个列
name_column = df['Name']

# 选择多个列
subset = df[['Name', 'Age']]

# 按条件过滤行
filtered_df = df[df['Age'] > 30]

# 按行索引选择行
row = df.loc[2]

2.1数据排序

DataFrame可以根据列的值进行排序,可以按升序或降序排列。以下是一个按年龄降序排序的示例:

sorted_df = df.sort_values('Age', ascending=False)

3.数据聚合

DataFrame可以进行各种数据聚合操作,如求和、均值、计数等。以下是一些常见的数据聚合操作示例:

# 求和
total_age = df['Age'].sum()

# 均值
average_age = df['Age'].mean()

# 计数
count = df['Age'].count()

   3.1DataFrame的高级技巧

4.数据透视表

数据透视表是一种在DataFrame中进行数据聚合和分析的强大工具。它可以根据一个或多个列进行分组,并计算其他列的统计信息。以下是一个简单的数据透视表示例:

4.1导入pandas库

import pandas as pd

4.2.创建一个DataFrame对象:

data = {'A': ['foo', 'bar', 'baz', 'foo', 'bar', 'baz'],
        'B': ['one', 'two', 'three', 'two', 'three', 'one'],
        'C': [1, 2, 3, 4, 5, 6],
        'D': [10, 20, 30, 40, 50, 60]}
df = pd.DataFrame(data)
4.3.创建数据透视表:
pivot_table = df.pivot_table(values='D', index=['A', 'B'], columns=['C'], aggfunc='sum')

在这个例子中,我们创建了一个数据透视表,其中值来自列'D',行索引来自列'A'和'B',列索引来自列'C',并使用'sum'函数对值进行聚合。

4.4.查看数据透视表:

print(pivot_table)

这将输出以下数据透视表:

C         1   2   3   4   5   6
A   B                   
bar one   NaN  20  NaN  NaN  NaN  NaN
    three NaN  NaN  30  NaN  NaN  NaN
baz one   NaN  NaN  NaN  40  NaN  NaN
    three NaN  NaN  NaN  NaN  50  NaN
foo one  10.0  NaN  NaN  NaN  NaN  NaN
    two   NaN  20.0  NaN  NaN  NaN  NaN

5.缺失数据处理

在实际数据中,经常会遇到缺失的数据。Pandas提供了多种方法来处理缺失数据,如填充缺失值、删除包含缺失值的行等。以下是一些常见的缺失数据处理示例:

# 填充缺失值
df_filled = df.fillna(0)

# 删除包含缺失值的行
df_dropped = df.dropna()

6.数据合并

在实际应用中,我们可能需要将多个DataFrame进行合并,以便进行更全面的数据分析。Pandas提供了多种方法来合并DataFrame,如连接、合并、拼接等。以下是一个简单的数据合并示例:

df1 = pd.DataFrame({'Name': ['Alice', 'Bob'], 'Age': [25, 30]})
df2 = pd.DataFrame({'Name': ['Charlie', 'David'], 'Age': [35, 40]})

merged_df = pd.concat([df1, df2])

在这个示例中,我们使用concat()函数将两个DataFrame按行合并成一个新的DataFrame。

三.结论

综上所述,Series和DataFrame是Python数据分析中常用的数据结构。可以通过索引和向量化操作对它们进行操作,并可使用apply()和groupby()方法应用自定义函数和进行数据分组。同时,DataFrame还支持数据合并的功能。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值