pandas(四十四)pandas100个神仙级用法

一、如何将一个列表转成Pandas的数据框
  • 列表类型,需要指定列名columns;不指定默认 0、1、2
    my_friend = [['zhangsan', 18, '男'], ['lisi', 17, '女']]
    df = pd.DataFrame(my_friend, columns=['unasename', 'age', 'gender'])
    df
    
  • 字典,可不指定列名columns;不指定,默认字典key值;指定则为自定义
    my_friend = [{
          
          'username': 'zhangsan', 'age': 18, 'gender': '男'}, {
          
          'username': 'lisi', 'age': 17, 'gender': '女'}]
    df = pd.DataFrame(my_friend)
    df
    
    	username	age	gender
    0	zhangsan	181	lisi		17
二、如何从一个CSV文件中读取数据到一个Pandas数据框
  • pandas read_csv() 参数

    1. filepath_or_buffer: 文件路径或对象,需要读取的CSV文件的路径。
    2. sep: 分隔符,默认为,。用于指定列之间的分隔符。
    3. header: 默认为'infer'。用于指定行号作为列名;没有表头header=None
    4. names: 默认为None。用于结果的列名列表。
    5. index_col: 默认为None。列名或列号,或者列名/列号的行索引。
    6. usecols: 默认为None。返回一个数据子集,该子集只包含指定的列。
    7. dtype: 列的数据类型。例如,{
          
          'a': np.float64, 'b': np.int32}8. skiprows: 要跳过的行数或行号的集合;读取时忽略第1/3/5行 skiprows=[1,3,5]
    9. na_values: 要识别为NaN的值的列表或集合。
    10. na_filter: 默认为True。检测丢失的值标记(空值或者na_values)。
    11. skip_blank_lines: 默认为True。如果为True,则跳过空行;否则它们将被识别为NaN。
    12. parse_dates: 需要解析为日期的列。
    13. date_parser: 用于解析日期的函数。
    14. nrows: 只读取前n行;nrows = 7 只读取前715. compression: 文件的压缩类型,例如:'gzip', 'bz2', 'zip', 'xz'16. thousands: 千位分隔符,例如:','或者 '.'17. decimal: 用于分隔整数和小数部分的字符,默认为'.'18. encoding: 文件的字符编码。utf-8;gbk
    19. skipfooter: 读取跳过文件末尾的行数;读取时忽略最后两行skipfooter=2
    20. comment: 识别为注释的字符。
    21. error_bad_lines: 是否应该删除包含太多字段的行,默认为True22. warn_bad_lines: 如果找到错误的行,是否应发出警告,默认为True
  • 读取CSV, 使用默认的标题行、逗号分隔符号

    df = pd.read_csv('./titanic_train.csv')
    df
    
  • 读取txt, 自己指定分隔符,标题行

    ratings = pd.read_csv(
        fpath,
        sep='\t',     # 指定分隔符、列名
        header=None,  # 告诉pd文件没有表头
        names=['userId','movieId','rating','timestamp'] # 自己设置标题行
    )
    
  • 读取txt, 自己指定分隔符,标题行

    df = pd.read_csv(
        './ratings.dat',
        sep="::",
        engine='python',
        names='UserID::movieID::Rating::Timestamp'.split('::')
    )
    
三、如何通过pandas创建数据到mysql数据库里面
  • pymysql 插入数据
    import pymysql
    conn = pymysql.connect(
        host='',
        user='',
        password='',
        database='demo',
        charset='utf8'
    )
    ratings = pd.read_sql(sql='select * from sys_user', con=conn)
    
  • 使用sqlalchemy 插入数据
    import pandas as pd
    from sqlalchemy import create_engine
    
    # 创建一个简单的DataFrame
    data = {
          
          
        'name': ['John', 'Anna', 'Mike'],
        'age': [28, 22, 32],
        'city': ['New York', 'Paris', 'Berlin']
    }
    df = pd.DataFrame(data)
    
    # 创建与MySQL数据库的连接
    # 格式:dialect+driver://username:password@host:port/database
    engine = create_engine('mysql+pymysql://username:password@localhost:3306/mydatabase')
    
    # 使用to_sql函数写入数据
    df.to_sql('mytable', engine, if_exists='replace', index=False)
    
四、如何查看一个Pandas数据框的行数和列数
import pandas as pd

# 创建一个示例DataFrame
data = {
    
    
    'A': [1, 2, 3, 4],
    'B': ['a', 'b', 'c', 'd'],
    'C': [1.1, 2.2, 3.3, 4.4]
}
df = pd.DataFrame(data)

# 使用shape属性查看行数和列数
rows, cols = df.shape

print(f'Number of rows: {
      
      rows}')
print(f'Number of columns: {
      
      cols}')
五、如何查看一个Pandas数据框的列名?
# 使用columns属性查看列名
column_names = df.columns
column_names_list = list(df.columns)

print(column_names)
print(column_names_list)
Index(['A', 'B', 'C'], dtype='object')

['A', 'B', 'C']
六、如何查看一个Pandas数据框的索引?
# 使用index属性查看索引
index_values = df.index
index_list = list(df.index)
print(index_values)
print(index_list)
RangeIndex(start=0, stop=4, step=1)
[0, 1, 2, 3]
七、如何查看一个Pandas数据框的索引?
# 打印pandas的版本号
print(pd.__version__)
八、如何查看一个Pandas数据框的数据类型?
# 使用dtypes属性查看每列的数据类型
data_types = df.dtypes

print(data_types)
A      int64
B     object
C    float64
D       bool
dtype: object
九、如何查看一个Pandas数据框的数据摘要统计信息?
import pandas as pd

# 创建一个示例DataFrame
data = {
    'A': [1, 2, 3, 4, 5],
    'B': ['a', 'b', 'c', 'd', 'a'],
    'C': [1.1, 2.2, 3.3, 4.4, 5.5]
}
df = pd.DataFrame(data)

# 使用describe方法获取数据摘要统计信息
summary = df.describe()
summary_all = df.describe(include='all')

print(summary)
print(summary_all)
               A    B         C
count   5.000000    5  5.000000
unique       NaN    4       NaN
top          NaN    a       NaN
freq         NaN    2       NaN
mean    3.000000  NaN  3.300000
std     1.581139  NaN  1.739253
min     1.000000  NaN  1.100000
25%     2.000000  NaN  2.200000
50%     3.000000  NaN  3.300000
75%     4.000000  NaN  4.400000
max     5.000000  NaN  5.500000
名称 解释 名称 解释
count 非空值的数量 unique 唯一值的数量
top 出现频率最高的值 freq 最高频率的值出现的次数
mean 平均值 std 标准偏差
min 最小值 25% 第25百分位数
50% 中位数 75% 第75百分位数
max 最大值
十、如何选择一个Pandas数据框的行?
  • 使用loc方法:通过标签索引选择行

    df.loc[index_label]
    
  • 使用iloc方法:通过整数位置索引选择行

    df.iloc[index_position]
    
  • 根据条件选择行:使用布尔索引

    df[df['column_name'] == value]
    
  • 使用head和tail方法:分别选择数据框的前几行和后几​​行

    df.head(n)  # 获取前n行
    df.tail(n)  # 获取后n行
    
  • 使用query方法:使用查询字符串选择行

    df.query("column_name == value")
    
  • 简单示例
    loc切片操作中,'y’是包含的
    iloc切片操作中,结束位置是不包含的

    2行       			df.loc[1])25行       		df.loc[[1, 4]])
    第x到y的行   		df.loc['x':'y']
    选择w和z的行,B和C的列 df.loc[['w', 'z'], ['B', 'C']]2行  				df.iloc[1]2到第3行			df.iloc[1:3]
    
    选择A列值为3的行   	df[df['A'] == 3]
    选择前3行			df.head(3)
    选择A列值为3的行 		df.query("A == 3")
    
    选择y行A列的元素 		df.loc['y', 'A'])   # 输出:3
    选择第三行第一列的元素  df.iloc[2, 0])      # 输出:3
    
十一、如何选择一个Pandas数据框的列?
  • 通过列名:使用数据框名称和列名可以直接提取列
    column_B = df['B']
    
  • 通过多个列名:选择多个列,向数据框提交一个列名列表
    selected_columns = df[['B', 'C']]
    
  • 通过loc:基于行标签行和列
    column_B_with_loc = df.loc[:, 'B']
    column_B_with_loc = df.loc[[0, 3]:, 'B']
    multiple_columns_with_loc = df.loc[:, ['B', 'C']]
    
  • 通过iloc:根据列的整数位置选择列
    first_column = df.iloc[:, 0]  # This selects the first column
    first_two_columns = df.iloc[:, :2]  # This selects the first two columns
    
十二、如何选择一个Pandas数据框的行和列?
import pandas as pd

data = {
    
    
    'A': [1, 2, 3, 4, 5],
    'B': ['a', 'b', 'c', 'd', 'e'],
    'C': ['!', '@', '#', '$', '%']
}
df = pd.DataFrame(data, index=['w', 'x', 'y', 'z', 'v'])
  • loc:通过标签选择行和列
    # 选择目标行和目标列
    cell_value = df.loc['row_label', 'column_label']
    # 选择行和多列:
    row_subset = df.loc['row_label', ['column_label1', 'column_label2']]
    # 选择多行和项目列
    column_subset = df.loc[['row_label1', 'row_label2'], 'column_label']
    # 选择多行和多列:
    subset = df.loc[['row_label1', 'row_label2'], ['column_label1', 'column_label2']]
    
  • iloc:通过整数位置选择行和列
    # 选择某一行的要素列: 选择第一行第二列的数据
    cell_value = df.iloc[0, 1]
    # 选择某一行的多列 选择前1行和前两列的数据
    row_subset = df.iloc[0, 0:2] 
    # 选择多行的项目列:选择前两行第一列
    column_subset = df.iloc[0:2, 0] 
    # 选择多行和多列:选择前两行、前两列
    subset = df.iloc[0:2, 0:2] 
    
  • 双重索引:先行后列
    # 使用loc选择行,然后直接使用列名选择列
    data_w_B_another = df.loc['w']['B']
    等价 
    df.loc['w', 'B'] 更直接且效率更高
    
    data_1_B = df.iloc[0]['B']
    等价
    df.iloc[0, 'B'] 更直接且效率更高
    
十三、如何筛选一个Pandas数据框的行?
  • 基于条件筛选:使用布尔索引来筛选满足特定条件的行
    筛选A列值大于2的行
    
    df[df['A'] > 2]
    
  • 使用query方法
    筛选A列值大于2的行
    
    df.query("A > 2")
    
  • 使用loc:loc可以基于行标签和列标签进行筛选,但也可以与布尔条件结合使用
    df.loc[df['A'] > 2]
    
  • 使用iloc
    # 使用布尔索引确定满足条件的行位置
    index_positions = df[df['A'] > 2].index
    
    # 使用iloc筛选这些行
    df.iloc[index_positions]
    
  • 基于字符串方法筛选:如果您要基于字符串列的某些特性来筛选行,可以使用str该方法
    # 筛选C列值为'#'的行
    df[df['C'].str.contains('#')]
    
十四、如何筛选一个Pandas数据框的行?
  • 用途loc:loc是基于行标签和列标签进行筛选的
    # 筛选A列值大于2的行,以及A和B两列
    
     df.loc[df['A'] > 2, ['A', 'B']]
     df.loc[df['C'] == '@', ['A', 'B']]
    
  • iloc是基于整数位置进行索引的
    # 筛选第3和第4行,以及第1和第2列
    df.iloc[2:4, 0:2]
    
    从筛选第二行, 第二列直到最后一列
    df.iloc[1, 1:]
    
    首先,获取满足条件行的整数位置。
    然后,利用这些整数位置与列的整数位置结合iloc来筛选
    
    # 获取满足A列值大于2的行的整数位置
    rows = df[df['A'] > 2].index
    
    # 获取列A和B的整数位置
    cols = [df.columns.get_loc(col) for col in ['A', 'B']]
    
    # 使用iloc筛选
    result = df.iloc[rows, cols]
    print(result)
    
十五、如何根据某一列的值对一个Pandas数据框进行排序?
  • 根据单列排序:使用sort_values方法并指定by参数为该列的名称
    # 根据A列进行升序排序
    sorted_df = df.sort_values(by='A')
    print(sorted_df)
    
  • 根据多列排序:将by参数设置为一个列名列表
    # 首先根据A列进行升序排序,然后根据B列进行降序排序
    sorted_df = df.sort_values(by=['A', 'B'], ascending=[True, False])
    print(sorted_df)
    
  • 降序排列:使用ascending参数将其设置为False。
    # 根据A列进行降序排序
    sorted_df = df.sort_values(by='A', ascending=False)
    print(sorted_df)
    
十六、如何对一个Pandas数据框进行透视操作?

Pandas中,使用pivot_table对数据框的方法进行透视操作。透视表是从数据框的派生出来的,它对数据进行汇总并提供多维度的分析。

以下是如何使用pivot_table对 Pandas 数据框进行透视操作的基本步骤:

  • Parameter Description
    index 作为透视表的行的列名称或列名称的列表。
    columns 作为透视表的列的列名称或列名称的列表。
    values 要聚合的列名称或列名称的列表。
    aggfunc 聚合函数或函数列表,默认为 numpy.mean。可以是任何聚合函数,例如 sum, min, max, mean, std 等。
    fill_value 替换结果中的缺失值的值。
    margins 添加行/列小计和总计,默认为 False。
    dropna 如果为 True,则删除所有项均为 NaN 的列。
    margins_name margins 的名称,默认为 ‘All’。
  • import pandas as pd
    import numpy as np
    
    # 创建示例 DataFrame
    data = {
          
          
        'A': ['foo', 'foo', 'foo', 'bar', 'bar'],
        'B': ['one', 'one', 'two', 'two', 'one'],
        'C': [1, 2, 3, 4, 5],
        'D': [10, 20, 30, 40, 50]
    }
    
    df = pd.DataFrame(data)
    
    # 透视表
    pivot = df.pivot_table(index='A', columns='B', values='C', aggfunc=np.sum)
    print(pivot)
    
    # 添加 margins
    pivot_with_margins = df.pivot_table(index='A', columns='B', values='C', aggfunc=np.sum, margins=True)
    print(pivot_with_margins)
    
  • 基础透视:
    假设我们有一个简单的数据集,包括日期、产品和销售额

    import pandas as pd
    
    data = {
          
          
        'Date': ['2023-01-01', '2023-01-01', '2023-01-02', '2023-01-02'],
        'Product': ['A', 'B', 'A', 'B'],
        'Sales': [100, 150, 110, 140]
    }
    
    df = pd.DataFrame(data)
    
    	Date	Product	Sales
    0	2023-01-01	A	100
    1	2023-01-01	B	150
    2	2023-01-02	A	110
    3	2023-01-02	B	140
    

    为了查看每一天的销售额中的每个产品,我们可以这样:

    pivot_df = df.pivot_table(index='Date', columns='Product', values='Sales')
    print(pivot_df)
    
    Product       A    B
    Date                
    2023-01-01   100  150
    2023-01-02   110  140
    
  • 聚合:
    如果数据中有重复的行(即同一天,同一产品的多个销售数据),我们需要进行聚合操作
    pivot_table默认使用np.mean进行聚合,但可以通过aggfunc参数更改为其他函数,例如sum

    创建一个透视表,它以Date索引为索引,以列为Product假设值,物质可能出现的重复数据进行求和
    pivot_df = df.pivot_table(index='Date', columns='Product', values='Sales', aggfunc='sum')
    print(pivot_df)
    
    Product       A    B
    Date                
    2023-01-01  100  150
    2023-01-02  110  140
    
    创建一个透视表,它以Product索引为索引,以列为Date假设值,物质可能出现的重复数据进行求和
    pivot_df = df.pivot_table(index='Product', columns='Date', values='Sales', aggfunc='sum')
    print(pivot_df)
    
    Date     2023-01-01  2023-01-02
    Product                        
    A               100         110
    B               150         140
    
  • 多指数和多值:使用多个列作为索引或值

    # 添加一个新的 'Region' 列到数据集
    data['Region'] = ['North', 'South', 'North', 'South']
    df = pd.DataFrame(data)
    
    	Date	Product	Sales	Region
    0	2023-01-01	A	100		North
    1	2023-01-01	B	150		South
    2	2023-01-02	A	110		North
    3	2023-01-02	B	140		South
    
    创建一个透视表,它以Date、Region索引为索引,以列为Product假设值,物质可能出现的重复数据进行求和
    pivot_df = df.pivot_table(index=['Date', 'Region'], columns='Product', values='Sales')
    print(pivot_df)
    
    Product                A      B
    Date       Region              
    2023-01-01 North   100.0    NaN
               South     NaN  150.0
    2023-01-02 North   110.0    NaN
               South     NaN  140.0
    
  • 填充值:使用fill_value参数来指定如何填充装载值

    pivot_df = df.pivot_table(index='Date', columns='Product', values='Sales', fill_value=0)
    print(pivot_df)
    
    Product       A    B
    Date                
    2023-01-01  100  150
    2023-01-02  110  140
    

猜你喜欢

转载自blog.csdn.net/a6864657/article/details/132728417