pandas 实例(数据归一化处理)

  1.目的

   论文中需要对数据进行归一化处理,使用spsspro软件正向和负向指标处理的公式处理数据后,     归一化的值偏大,用EXCEL计算又感觉有些麻烦,于是想着自己写个几行代码,自己定义公式。

  2. 自己写的代码

import pandas as pd

# 指定文件路径
PATH = r"C:\Users\31911\Desktop\test2018.xlsx"


# 读取Excel文件
df = pd.read_excel(PATH)

# 应用转换公式并将结果存储在新列中
for name in df.columns:
    # 计算当前列的最大值和最小值
    max_value = df[name].max()
    min_value = df[name].min()
    
    # 创建新列名,避免覆盖原始列
    new_column_name = name + '_N'
    
    # 应用转换公式
    df[new_column_name] = (df[name] - 0.1 * min_value) / (2 * max_value - 0.1 * min_value)

# 将处理后的数据存储回Excel文件
# 如果需要覆盖原文件,可以使用sheet_name='Sheet1'指定工作表名称
df.to_excel(PATH, index=False, header=True, engine='openpyxl')

print("数据已成功处理并存储到Excel文件。")

      需要注意的地方是name是动态的,所以不需要加上''

3. 精简后的代码

import pandas as pd

# 指定文件路径
PATH = r"C:\Users\31911\Desktop\test2018.xlsx"

# 读取Excel文件
df = pd.read_excel(PATH)

# 定义转换函数
def transform(x):
    max_value = x.max()
    min_value = x.min()
    return (x - 0.1 * min_value) / (2 * max_value - 0.1 * min_value)

# 应用转换函数到每一列,并存储在新列中
df_transformed = df.apply(transform)

# 将处理后的数据存储回Excel文件
df_transformed.to_excel(PATH, index=False, header=True, engine='openpyxl')

print("数据已成功处理并存储到Excel文件。")

4.知识点学习

4.1 apply()的用法

apply() 方法在 Pandas 中非常有用,它允许将一个函数应用于 DataFrame 的行或列。

apply() 默认应用于DataFrame的列。如果您想对行应用函数,需要设置 axis=1

import pandas as pd

# 创建一个示例DataFrame
df = pd.DataFrame({
    'A': [1, 2, 3],
    'B': [4, 5, 6],
    'C': [7, 8, 9]
})

# 定义一个简单的函数,比如求和
def my_function(x):
    return x.sum()

# 应用函数于每一列,axis=0表示沿着列的方向
result_by_column = df.apply(my_function, axis=0)
print(result_by_column)

# 应用函数于每一行,axis=1表示沿着行的方向
result_by_row = df.apply(my_function, axis=1)
print(result_by_row)

4.2  lambda 函数的应用

lambda 函数是一种使用简洁的语法来创建匿名函数的方法。在Python中,lambda 函数可以接收任意数量的参数,但只能包含一个表达式,而不是一个块语句。表达式的结果是这个 lambda 函数的返回值。 

lambda arguments: expression          

  • arguments:参数列表,可以是任意数量和类型的参数。
  • expression:一个表达式,返回值即 lambda 函数的结果。
1.示例1
# 创建一个lambda函数,计算两个数的和
add = lambda x, y: x + y

# 使用lambda函数
result = add(5, 3)
print(result)  # 输出: 8


2.示例2

# 创建一个lambda函数,返回字符串的长度
length = lambda s: len(s)

# 使用lambda函数
result = length("hello")
print(result)  # 输出: 5


3.示例3

# 创建一个lambda函数,根据条件返回不同的值
conditional = lambda x: "positive" if x > 0 else "negative"

# 使用lambda函数
result = conditional(10)
print(result)  # 输出: "positive"
result = conditional(-5)
print(result)  # 输出: "negative"



4.示例4

# 创建一个列表
numbers = [5, 3, 8, 1, 2]

# 使用lambda函数进行排序
sorted_numbers = sorted(numbers, key=lambda x: -x)

print(sorted_numbers)  # 输出: [8, 5, 3, 2, 1]

4.3 map()函数

map() 函数是Python中用于对可迭代对象中的每个元素应用指定函数的内置函数。它接收两个参数:第一个是一个函数,第二个是一个可迭代对象。map() 函数将传入的函数应用于可迭代对象的每个元素,并返回一个新的迭代器。

map(function, iterable, ...)   

  • function:要应用于每个元素的函数。这可以是内建函数或自定义函数。
  • iterable:一个或多个可迭代对象,例如列表、元组、字典等。
    示例1:使用内建函数
    python
    numbers = [1, 2, 3, 4]
    doubled_numbers = map(lambda x: x * 2, numbers)
    print(list(doubled_numbers))  # 输出: [2, 4, 6, 8]
    
    示例2:使用自定义函数
    python
    def square(x):
        return x ** 2
    
    numbers = [1, 2, 3, 4]
    squared_numbers = map(square, numbers)
    print(list(squared_numbers))  # 输出: [1, 4, 9, 16]
    
    
    示例3:使用多个可迭代对象
    map() 也可以接收多个可迭代对象,并将函数应用于它们的对应元素。
    python
    numbers = [1, 2, 3, 4]
    multipliers = [2, 3, 4, 5]
    result = map(lambda x, y: x * y, numbers, multipliers)
    print(list(result))  # 输出: [2, 6, 12, 20]
    
    注意事项
    map() 总是返回一个迭代器,即使它只处理一个元素。
    如果要处理的数据量很大,使用 map() 可能比列表推导式更节省内存,因为迭代器是按需计算的。
    当函数逻辑非常简单时,使用 lambda 函数可以提高代码的简洁性。
    在Python 3中,map() 不再返回列表,而是返回一个迭代器。要将结果转换为列表,需要使用 list() 函数。

    4.4 items()和iterrows()方法

       在Pandas中,items()方法是一个用于遍历DataFrame或Series中(键-值)对的方法。items()方法更常见于Python的标准字典对象。DataFrame本身并没有直接的items()方法用于遍历行。但你可以使用iterrows()来遍历DataFrame的行,它会返回每行的索引和该行的数据(作为Series)。

import pandas as pd

# 创建一个示例DataFrame
df = pd.DataFrame({
    'x1': [1, 2, 3, 4],
    'x2': [5, 6, 7, 8]
})
print(df)
# 使用items()方法遍历DataFrame中的列和数据
for col_name, col_data in df.items():
    print(f"列名: {col_name}")
    for idx, value in col_data.items():  # 注意这里使用iteritems()来遍历Series的索引和值
        print(f"  索引: {idx}, 值: {value}")

iterrows() 是 Pandas DataFrame 的一个方法,它用于按行遍历 DataFrame 中的数据。每次迭代,iterrows() 都会返回一个包含行索引和行数据的元组。行索引是行的标签,而行数据则是该行对应值的 Series 对象。

import pandas as pd  
  
# 创建一个简单的 DataFrame  
df = pd.DataFrame({  
    'A': [1, 2, 3],  
    'B': [4, 5, 6],  
    'C': [7, 8, 9]  
})  
  
# 使用 iterrows() 遍历 DataFrame  
for index, row in df.iterrows():  
    print(f'Index: {index}')  
    print(f'A: {row["A"]}, B: {row["B"]}, C: {row["C"]}')

  • 20
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值