python.pandas.day18

重置索引(reindex)可以更改原 DataFrame 的行标签或列标签,并使更改后的行、列标签与 DataFrame 中的数据逐一匹配。通过重置索引操作,您可以完成对现有数据的重新排序。如果重置的索引标签在原 DataFrame 中不存在,那么该标签对应的元素值将全部填充为 NaN。

reindex

reindex() 方法用于重新索引 DataFrame 或 Series 对象。重新索引意味着根据新的索引标签重新排列数据,并填充缺失值。如果重置的索引标签在原 DataFrame 中不存在,那么该标签对应的元素值将全部填充为 NaN。

语法

# 创建一个示例 DataFrame
data = {
    'A': [1, 2, 3],
    'B': [4, 5, 6],
    'C': [7, 8, 9]
}
df = pd.DataFrame(data, index=['a', 'b', 'c'])
#重新索引行,d行被填充为Nan
new_index = ['a', 'b', 'c', 'd']
df_reindexed = df.reindex(new_index)
print(df_reindexed)

#重新索引列,D列填充为Nan
new_columns = ['A', 'B', 'C', 'D']
df_reindexed =df.reindex(columns=new_columns)
print(df_reindexed)

#重新索引行,并使用先前填充
new_index = ['a', 'b', 'c', 'd']
df_reindexed = df.reindex(new_index,method='ffill')
print(df_reindexed)
#指定填充值
df_reindexed = df.reindex(new_index,fill_value=0)
print(df_reindexed)

3、遍历

DataFrame 这种二维数据表结构,遍历会获取列标签

dataFrame_data = pd.DataFrame({
    'one': pd.Series([1, 2, 3], index=['a', 'b', 'c']),
    'two': pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
})
# 遍历dataframe得到的是列标签
print('DataFrame:')
for i in dataFrame_data:
    print(i)

遍历行

itertuples() 方法用于遍历 DataFrame 的行,返回一个包含行数据的命名元组

data = {
    'A': [1, 2, 3],
    'B': [4, 5, 6],
    'C': [7, 8, 9]
}
df = pd.DataFrame(data, index=['a', 'b', 'c'])
for i in df.itertuples():
    print(i)

 items() 方法用于遍历 DataFrame 的列,返回一个包含列名和列数据的迭代器。

data = {
    'A': [1, 2, 3],
    'B': [4, 5, 6],
    'C': [7, 8, 9]
}
df = pd.DataFrame(data, index=['a', 'b', 'c'])
for col, col_value in df.items():
    print(col, col_value)

使用属性遍历

loc 和 iloc 方法可以用于按索引或位置遍历 DataFrame 的行和列。

data = {
    'A': [1, 2, 3],
    'B': [4, 5, 6],
    'C': [7, 8, 9]
}
df = pd.DataFrame(data, index=['a', 'b', 'c'])
for i in df.index:
    for j in df.columns:
        print(f'index:{i}, column:{j},value:{df.loc[i, j]}')

 

4、排序

4.1 sort_index

sort_index 方法用于对 DataFrame 或 Series 的索引进行排序。

参数

  • axis:指定要排序的轴。默认为 0,表示按行索引排序。如果设置为 1,将按列索引排序。

  • ascending:布尔值,指定是升序排序(True)还是降序排序(False)。

  • inplace:布尔值,指定是否在原地修改数据。如果为 True,则会修改原始数据;如果为 False,则返回一个新的排序后的对象。

import pandas as pd

# 创建一个示例 DataFrame
data = {
    'A': [1, 2, 3],
    'B': [4, 5, 6],
    'C': [7, 8, 9]
}
df = pd.DataFrame(data, index=['b', 'c', 'a'])
print(df.sort_index())
#不改变值只改变了标签的顺序
#按列索引标签降序排序
df_sorted = df.sort_index(axis='columns',ascending=False)
print(df_sorted)

 

4.2 sort_values

sort_values 方法用于根据一个或多个列的值对 DataFrame 进行排序。

语法

参数:

  • by:列的标签或列的标签列表。指定要排序的列。

  • axis:指定沿着哪个轴排序。默认为 0,表示按行排序。如果设置为 1,将按列排序。

  • ascending:布尔值或布尔值列表,指定是升序排序(True)还是降序排序(False)。可以为每个列指定不同的排序方向。

  • inplace:布尔值,指定是否在原地修改数据。如果为 True,则会修改原始数据;如果为 False,则返回一个新的排序后的对象。

  • kind:排序算法。默认为 'quicksort',也可以选择 'mergesort'(归并排序) 或 'heapsort'(堆排序)。

  • na_position:指定缺失值(NaN)的位置。可以是 'first' 或 'last'。

  • 
    # 创建一个示例 DataFrame
    import pandas as pd
    
    # 创建一个示例 DataFrame
    data = {
        'A': [3, 2, 1],
        'B': [6, 5, 4],
        'C': [9, 8, 7]
    }
    df = pd.DataFrame(data, index=['b', 'c', 'a'])
    
    # 按列 'A' 排序
    df_sorted = df.sort_values(by ='A')
    print(df_sorted)
    # 按列 'A' 和 'B' 排序
    df_sorted =df.sort_values(by =['A', 'B'])
    print(df_sorted)
    
    # 按列 'A' 和 'B' 排序,先按A列降序排序,如果A列中值相同则按B列升序排序
    df = pd.DataFrame({
        'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
        'Age': [25, 30, 25, 35, 30],
        'Score': [85, 90, 80, 95, 88]
    })
    df_sorted = df.sort_values(by =['Age', 'Score'],ascending=[False, True])
    print(df_sorted)

    5、去重

    drop_duplicates 方法用于删除 DataFrame 或 Series 中的重复行或元素。

    语法:

    drop_duplicates(by=None, subset=None, keep='first', inplace=False)
    Series.drop_duplicates(keep='first', inplace=False)

    参数

  • by:用于标识重复项的列名或列名列表。如果未指定,则使用所有列。

  • subset:与 by 类似,但用于指定列的子集。

  • keep:指定如何处理重复项。可以是:

    • 'first':保留第一个出现的重复项(默认值)。

    • 'last':保留最后一个出现的重复项。

    • False:删除所有重复项。

  • inplace:布尔值,指定是否在原地修改数据。如果为 True,则会修改原始数据;如果为 False,则返回一个新的删除重复项后的对象

    # 创建一个示例 DataFrame
    data = {
        'A': [1, 2, 2, 3],
        'B': [4, 5, 5, 6],
        'C': [7, 8, 8, 9]
    }
    df = pd.DataFrame(data)
    #默认保留前一个
    df_drop = df.drop_duplicates()
    print(df_drop)
    #保留最后一个
    df_drop = df.drop_duplicates(keep='last')
    print(df_drop)

    6、分组

    6.1 groupby

    groupby 方法用于对数据进行分组操作,这是数据分析中非常常见的一个步骤。通过 groupby,你可以将数据集按照某个列(或多个列)的值分组,然后对每个组应用聚合函数,比如求和、平均值、最大值等。

    语法

    DataFrame.groupby(by, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, observed=False, **kwargs)

    参数

  • by:用于分组的列名或列名列表。

  • axis:指定沿着哪个轴进行分组。默认为 0,表示按行分组。

  • level:用于分组的 MultiIndex 的级别。

  • as_index:布尔值,指定分组后索引是否保留。如果为 True,则分组列将成为结果的索引;如果为 False,则返回一个列包含分组信息的 DataFrame。

  • sort:布尔值,指定在分组操作中是否对数据进行排序。默认为 True。

  • group_keys:布尔值,指定是否在结果中添加组键。

  • squeeze:布尔值,如果为 True,并且分组结果返回一个元素,则返回该元素而不是单列 DataFrame。

  • observed:布尔值,如果为 True,则只考虑数据中出现的标签。

 #创建一个示例 DataFrame
data = {
    'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
    'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
    'C': [1, 2, 3, 4, 5, 6, 7, 8],
    'D': [10, 20, 30, 40, 50, 60, 70, 80]
}
df = pd.DataFrame(data)
df_A = df.groupby('A')
for name, group in df_A :
    print(f"Group: {name}")
    print(group)
    print()
mean = df_A['C'].mean()
print(mean)
# 在分组内根据C列求平均值
# transform用于在分组操作中对每个组内的数据进行转换,并将结果合并回原始 DataFrame。
mean = df_A['C'].transform(lambda x: x.mean())
df['m'] = mean
print(df)
# 在分组内根据C列求标准差
std = df_A['C'].transform(lambda x: x.std())
print(std)
df['std'] = std
print(df)
# 在分组内根据C列进行正太分布标准化
norm = df_A['C'].transform(lambda x: (x - x.mean()) / x.std())
df['C_normal'] = norm
print(df)

 

6.2 filter

通过 filter() 函数可以实现数据的筛选,该函数根据定义的条件过滤数据并返回一个新的数据集

import pandas as pd

# 创建一个示例 DataFrame
    data = {
        'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
        'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
        'C': [1, 2, 3, 4, 5, 6, 7, 8],
        'D': [10, 20, 30, 40, 50, 60, 70, 80]
    }
    df = pd.DataFrame(data)

# 按列 'A' 分组,并过滤掉列 'C' 的平均值大于 4 的组

 

# 创建一个示例 DataFrame
data = {
    'A': ['foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo'],
    'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
    'C': [1, 2, 3, 4, 5, 6, 7, 8],
    'D': [10, 20, 30, 40, 50, 60, 70, 80]
}
df = pd.DataFrame(data)
mean = df.groupby('A')['C'].mean()
print(mean)
new_df = df.groupby('A').filter(lambda x:x['C'].mean()>4)
print(new_df)
# 按列 'A' 分组,并过滤掉列 'C' 的平均值大于 4 的组

8、随机抽样

参数

  • n:要抽取的行数

  • frac:抽取的比例,比如 frac=0.5,代表抽取总体数据的50%

  • replace:布尔值参数,表示是否以有放回抽样的方式进行选择,默认为 False,取出数据后不再放回

  • weights:可选参数,代表每个样本的权重值,参数值是字符串或者数组

  • random_state:可选参数,控制随机状态,默认为 None,表示随机数据不会重复;若为 1 表示会取得重复数据

  • axis:表示在哪个方向上抽取数据(axis=1 表示列/axis=0 表示行)

案例

import pandas as pd


df = pd.DataFrame({
    "company": ['百度', '阿里', '腾讯'],
    "salary": [43000, 24000, 40000],
    "age": [25, 35, 49]
})
#随机输出两行
print(df.sample(n=2,axis='index'))
#随机输出两列
print(df.sample(n=2,axis='columns'))
#按照比例随机
print(df.sample(axis='index',frac=0.5))

9、空值处理

9.1 检测空值

isnull()用于检测 DataFrame 或 Series 中的空值,返回一个布尔值的 DataFrame 或 Series。

notnull()用于检测 DataFrame 或 Series 中的非空值,返回一个布尔值的 DataFrame 或 Series。

data = {
    'A': [1, 2, np.nan, 4],
    'B': [5, np.nan, np.nan, 8],
    'C': [9, 10, 11, 12]
}
df = pd.DataFrame(data)
#检测空值
is_null = df.isnull()
print(is_null)
#检测非空值
not_null = df.notnull()
print(not_null)

 

9.2 填充空值

fillna() 方法用于填充 DataFrame 或 Series 中的空值。


# 创建一个包含空值的示例 DataFrame
data = {
    'A': [1, 2, np.nan, 4],
    'B': [5, np.nan, np.nan, 8],
    'C': [9, 10, 11, 12]
}
df = pd.DataFrame(data)
#检测空值
is_null = df.isnull()
print(is_null)
#检测非空值
not_null = df.notnull()
print(not_null)
#把空值全填为value
df_fill=df.fillna(0)
print(df_fill)

9.3 删除空值

dropna() 方法用于删除 DataFrame 或 Series 中的空值。

data = {
    'A': [1, 2, np.nan, 4],
    'B': [5, np.nan, np.nan, 8],
    'C': [9, 10, 11, 12]
}
df = pd.DataFrame(data)
#参数how=‘any',存在任意一个就删除,how='all',该行或者列全为空值才删除
#删除空值行
df_droped = df.dropna(axis=0, how='any')
print(df_droped)
#删除空值列
df_droped = df.dropna(axis='columns')
print(df_droped)

 

三、读取CSV文件

CSV(Comma-Separated Values,逗号分隔值,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本);

CSV 是一种通用的、相对简单的文件格式,被用户、商业和科学广泛应用。

1、to_csv()

to_csv() 方法将 DataFrame 存储为 csv 文件

import pandas as pd

# 创建一个简单的 DataFrame
data = {
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [25, 30, 35],
    'City': ['New York', 'Los Angeles', 'Chicago']
}
df = pd.DataFrame(data)
#将Dataframe导入csv
df.to_csv('人员信息表.csv')

 

2、read_csv()

read_csv() 表示从 CSV 文件中读取数据,并创建 DataFrame 对象。

 

import pandas as pd
#导入csv
pf =pd.read_csv('人员信息表.csv')
#打印
print(pf)

 

四、绘图

Pandas 在数据分析、数据可视化方面有着较为广泛的应用,Pandas 对 Matplotlib 绘图软件包的基础上单独封装了一个plot()接口,通过调用该接口可以实现常用的绘图操作;

Pandas 之所以能够实现了数据可视化,主要利用了 Matplotlib 库的 plot() 方法,它对 plot() 方法做了简单的封装,因此您可以直接调用该接口;

只用 pandas 绘制图片可能可以编译,但是不会显示图片,需要使用 matplotlib 库,调用 show() 方法显示图形

# 创建一个示例 DataFrame
data = {
    'A': [1, 2, 3, 4, 5],
    'B': [10, 20, 25, 30, 40]
}
df = pd.DataFrame(data)
#绘制折线图
df.plot(kind='line')
plt.show()
df.plot(kind='bar')
plt.show()
# 绘制直方图
df['A'].plot(kind='hist')
# 显示图表
plt.show()
# 绘制散点图
df.plot(kind='scatter', x='A', y='B')
# 显示图表
plt.show()

饼图

# 创建一个示例 Series
data = {
    'A': 10,
    'B': 20,
    'C': 30,
    'D': 40
}
series = pd.Series(data)
# 绘制饼图
series.plot(kind='pie', autopct='%1.1f%%')
# 显示图表
plt.show()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值