Python 零散

发布时间:2024年01月22日

列表推导式? ? ? ??

????????列表推导式是一种在一行代码中创建列表的紧凑语法。它允许你使用一种简洁的方式从一个可迭代对象(例如列表、元组、字符串等)中生成新的列表。列表推导式的一般形式如下:

????????new_list = [expression for item in iterable if condition]

其中:

  • expression?是一个用于计算新元素值的表达式。
  • item?是可迭代对象中的每个元素。
  • iterable?是原始可迭代对象。
  • condition(可选)是一个过滤条件,只有满足条件的元素才会被包含在新列表中。

例如,如果我们想要创建一个包含1到10的平方的列表,可以使用以下列表推导式

squares = [x**2 for x in range(1, 11)]

????????这将生成一个名为squares的新列表,其中包含了1到10的每个数字的平方。列表推导式是Python中的一种强大而简洁的语法,可以在很少的代码行中实现许多常见的列表操作。

关键字参数

????????在Python中,关键字参数是一种允许在函数调用中通过参数名称指定参数值的方式。与位置参数不同,关键字参数不依赖于参数的位置,而是通过参数名来匹配传递的值。这使得函数调用更加清晰、灵活,并且在函数定义和调用时提供了更好的可读性。

以下是关键字参数的一般形式:

def function_name(param1, param2, ..., kwarg1=default_value1, kwarg2=default_value2, ...): # 函数体

其中:

  • param1,?param2, ... 是函数的位置参数。
  • kwarg1,?kwarg2, ... 是函数的关键字参数,可以在调用时指定或使用默认值。

示例:

def greet(name, greeting="Hello", punctuation="!"):
    print(f"{greeting}, {name}{punctuation}")

# 使用位置参数调用
greet("Alice")  # 默认使用greeting="Hello", punctuation="!"

# 使用关键字参数调用
greet(name="Bob", greeting="Hi")  # 指定name="Bob", greeting="Hi", 使用默认值punctuation="!"

# 混合使用位置参数和关键字参数
greet("Charlie", punctuation="??")  # 使用位置参数name="Charlie"和默认值greeting="Hello", 指定punctuation="??"

????????在函数调用时,关键字参数可以以任意顺序传递,只要它们与函数定义中的参数名匹配。这提高了代码的可读性和灵活性,并允许在不改变函数定义的情况下修改函数行为。

?DataFrame

????????在Python中,DataFrame 是 pandas 库中的一个主要数据结构,用于处理和分析表格型数据。DataFrame 可以看作是一个二维的表格,类似于电子表格或数据库表。每个列可以包含不同的数据类型,例如整数、浮点数、字符串等。以下是 DataFrame 的一些重要特点和操作:

  1. 创建 DataFrame: 可以通过多种方式创建 DataFrame,其中最常见的方式是从其他数据结构(如列表、字典、Numpy 数组)或外部数据源(如 CSV 文件、Excel 文件)中加载数据。

    import pandas as pd
    
    # 从字典创建 DataFrame
    data = {'Name': ['Alice', 'Bob', 'Charlie'],
            'Age': [25, 30, 35],
            'City': ['New York', 'San Francisco', 'Los Angeles']}
    
    df = pd.DataFrame(data)
    
  2. 查看和处理数据: DataFrame 提供了多种方法来查看和处理数据。你可以查看头部或尾部的几行,获取列的基本统计信息,过滤数据等。

    # 查看头部几行
    print(df.head())
    
    # 获取基本统计信息
    print(df.describe())
    
    # 过滤数据
    filtered_df = df[df['Age'] > 30]
    
  3. 访问和操作数据: 可以通过列名或位置访问 DataFrame 中的数据,也可以进行列间的运算和操作。

    # 访问列
    ages = df['Age']
    
    # 添加新列
    df['Senior'] = df['Age'] > 30
    
  4. 处理缺失值: pandas 提供了一些方法来处理缺失值,例如删除包含缺失值的行或列,填充缺失值等。

    # 删除包含缺失值的行
    df.dropna()
    
    # 填充缺失值
    df.fillna(0)
    
  5. 导入和导出数据: DataFrame 可以从多种数据源导入,也可以将数据导出到不同的格式,如 CSV、Excel 等。

    # 从 CSV 文件导入数据
    df_csv = pd.read_csv('example.csv')
    
    # 导出到 Excel 文件
    df.to_excel('output.xlsx', index=False)
    

panda.Series

????????在 Python 中,pandas 是一个用于数据处理和分析的强大库。pandas.Series 是一维带标签的数组,可以容纳任何数据类型。下面是关于 pandas.Series 的一些基本解释:

创建 Series 对象:

可以使用以下方式创建 pandas.Series 对象:

import pandas as pd

# 从列表创建 Series
data = [1, 2, 3, 4, 5]
series_from_list = pd.Series(data)

# 从 NumPy 数组创建 Series
import numpy as np
array_data = np.array([1, 2, 3, 4, 5])
series_from_array = pd.Series(array_data)

# 从字典创建 Series
dict_data = {'a': 1, 'b': 2, 'c': 3}
series_from_dict = pd.Series(dict_data)

特点:

  1. 一维结构: pandas.Series 是一维的,类似于列向量或一维数组。

  2. 带标签: 每个元素都有一个标签,可以通过索引访问。默认情况下,索引是整数,从 0 开始递增。

  3. 数据类型灵活: pandas.Series 可以容纳不同类型的数据,包括整数、浮点数、字符串等。

# 示例
mixed_data = pd.Series([1, 'two', 3.0, 'four'])

?可以使用索引访问 pandas.Series 中的数据:

# 示例
print(series_from_list[2])  # 输出: 3
print(series_from_dict['b'])  # 输出: 2

属性和方法:

pandas.Series 对象具有许多属性和方法,其中一些常用的有:

  • values:?返回一个包含 Series 数据的 NumPy 数组。
  • index:?返回包含索引的 Index 对象。
  • dtype:?返回 Series 中数据的数据类型。
# 示例
print(series_from_list.values)
print(series_from_dict.index)
print(series_from_array.dtype)

操作和运算:

pandas.Series 支持许多操作和运算,包括基本的数学运算、条件过滤等。

# 示例
result = series_from_list * 2
filtered_data = series_from_list[series_from_list > 2]

缺失值处理:

pandas.Series 中可以包含缺失值(NaN),并提供一些方法用于处理缺失值,如 dropna()fillna()

# 示例
series_with_nan = pd.Series([1, 2, np.nan, 4, 5])
cleaned_series = series_with_nan.dropna()
filled_series = series_with_nan.fillna(0)

pandas生成时间序列

????????data_range

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
rng = pd.date_range('2016/07/01', periods=10, freq='D')
print(rng)

plt.subplots

  • plt.subplotsMatplotlib 库中的一个函数,用于创建包含多个子图的图形。它返回一个包含所有子图的 Figure 对象和一个包含每个子图的 Axes 对象的 NumPy 数组。

  • ncols 这是一个整数,表示图形中子图的列数(即横向的子图数量)。

  • nrows 这是一个整数,表示图形中子图的行数(即纵向的子图数量)。

  • figsize 这是一个元组,表示整个图形的大小。在这里,图形的大小被设置为每个子图的宽度和高度都是 4 倍 ncolsnrows

一个警告

ConvergenceWarning: Maximum Likelihood optimization failed to converge. Check mle_retvals warnings.warn("Maximum Likelihood optimization failed to "

????????这个警告表明在进行最大似然估计(Maximum Likelihood Estimation,MLE)时,优化过程没有成功收敛。这可能是由于模型的某些特性导致的,或者可能是初始化参数的选择不够好。这种情况下,通常需要采取一些步骤来解决。

可能的解决方法

  1. 调整初始参数: 尝试使用不同的初始参数值,有时候选择不同的初始参数可以帮助算法更容易地收敛,可以通过在拟合模型时传递 start_params 参数来指定初始参数。

    model_results = arima200.fit(start_params=my_starting_params)

    my_starting_params 是选择的初始参数值。

  2. 增加迭代次数: 增加最大迭代次数可能有助于使优化过程更充分。

    model_results = arima200.fit(maxiter=my_max_iterations)

    my_max_iterations 是指定的最大迭代次数。

  3. 检查数据: 确保你的时间序列数据质量良好,不包含异常值或缺失值。异常值或不规范的数据可能会干扰优化过程。

  4. 尝试其他优化方法: 在拟合模型时,可以尝试使用其他的优化方法。在 Statsmodels 中,可以通过 method 参数指定不同的优化方法。例如可以尝试使用 method='nm' 表示使用 Nelder-Mead 优化方法。

    model_results = arima200.fit(method='nm')
文章来源:https://blog.csdn.net/qq_43010742/article/details/135716526
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。