zoukankan      html  css  js  c++  java
  • python数据处理的常用操作

    python数据处理

    1.生成数据2.数据表检查3.数据表清洗4.数据预处理5.数据提取6.数据筛选7.数据汇总8.数据统计9.数据输出

    1.生成数据

    1.导入数据表

    df = pd.read_excel('C:/Users/Admin/Desktop/types/output.xlsx')
    df1 = pd.read_csv('C:/Users/Admin/Desktop/types/output.csv')

    2.创建数据表

    df = pd.DataFrame(({"id": [100110021003100410051006],
                        "date": pd.date_range('20130102', periods=6),
                        "city": ['Beijing ''SH'' guangzhou ''Shenzhen''shanghai''BEIJING '],
                        "age": [234454323432],
                        "category": ['100-A''100-B''110-A''110-C''210-A''130-F'],
                        "price": [1200, np.nan, 21335433, np.nan, 4432]}))

    2.数据表检查

    1.查看维度(行列)

    df.shape

    (6, 6)

    2.数据表信息

    df.info()

    3.查看数据格式

    # 查看数据表各列格式
    print(df.dtypes)
    # 查看数据表单列格式
    print(df['city'].dtype)

    4.查看空值

    # 检查数据是否为空值
    print(df.isnull())
    # 检查特定列是否为空值
    print(df['price'].isnull())

    5.查看唯一值

    # 查看city列中的唯一值
    print(df['city'].unique())

    ['Beijing ' 'SH' ' guangzhou ' 'Shenzhen' 'shanghai' 'BEIJING ']

    6.查看数据表数据

    print(df.values)

    7.查看列名称

    print(df.columns)

    Index(['id', 'date', 'city', 'age', 'category', 'price'], dtype='object')

    8.查看前多少行数据

    # 不设置值时,默认为5行
    print(df.head(3))

    9.查看前多少行数据

    # 不设置值时,默认为5行
    print(df.tail(3))

    3.数据表清洗

    1.处理空值(删除或填充)

    # 删除数据表中含有空值的行
    print(df)
    df.dropna(how='any')
    # 使用数据0填空数据表中空值
    df.fillna(value=0)
    # 使用price均值对NA进行填充
    print(df['price'].fillna(df['price'].mean()))

    2.清理空格

    # 清除city字段中的字符空格
    df['city'] = df['city'].map(str.strip)

    3.大小写转换

    # city列大小写转换
    df['city'] = df['city'].str.lower()

    4.更改数据格式

    # 更改数据格式
    df['age'] = df['age'].astype(int)

    5.更改列名称

    df.rename(columns={'category''category-size'})

    6.删除重复值

    print(df['city'])
    # 删除后出现的重复值(第一次的beijing被保留,最后出现的beijing被删除)
    print(df['city'].drop_duplicates())
    # 设置keep='list'参数后,与之前删除重复值的结果相反,第一位出现的beijing被删除,保留最后一位出现的beijing
    print(df['city'].drop_duplicates(keep='last'))

    7.数值修改及替换

    # 数据替换
    print(df['city'].replace('sh''shanghai'))

    4.数据预处理

    1.数据表合并

    df1 = pd.DataFrame({'id': [10011002100310041005100610071008],
                        'gender': ['male''female''male''female''male''female''male''female'],
                        'pay': ['Y''N''Y''Y''N''Y''N''Y'],
                        'm-point': [1012204040403020]})
    # 数据表匹配合并
    # 内连接
    df_inner = pd.merge(df, df1, how='inner')
    # 左连接
    df_left = pd.merge(df, df1, how='left')
    # 右连接
    df_right = pd.merge(df, df1, how='right')
    # 外连接
    df_out = pd.merge(df, df1, how='outer')

    2.设置索引列

    print(df_inner.set_index('id'))

    3.排序(按索引,按数值)

    # 按特定列的值排序
    print(df_inner.sort_values(by=['age']))  # 默认升序,降序ascending=False
    # 按索引列排序
    print(df_inner.set_index(keys='date'))  # 行索引进行排序

    4.数据分组

    # 如果price列的值>3000,group列显示high,否则显示为low
    df_inner['group'] = np.where(df_inner['price'] > 3000'high''low')

    # 对复合多个条件的数据进行分组标记
    # 对city列等于beijing并且price列大于等于4000的数据标记为1
    df_inner.loc[(df_inner['city'] == 'beijing') & (df_inner['price'] >= 4000), 'sign'] = 1

    5.数据分列

    # 对category字段的值依次进行分列,并创建数据表,索引值为df_inner的索引列,列名称为category和size
    split = pd.DataFrame((x.split('-'for x in df_inner['category']), index=df_inner.index, columns=['category''size'])
    print(split)
    # 将完成分列后的数据表与原df_inner数据表进行匹配
    df_inner = pd.merge(df_inner, split, right_index=True, left_index=True)
    print(df_inner)

    5.数据提取

    1.按标签提取(loc)

    # 按索引提取单行的数据
    print(df_inner.loc[3])
    # 按索引提取区域行数值
    print(df_inner.loc[0:5]) # 提取0到5的数据行
    # 设置日期为索引
    df_inner = df_inner.set_index('date')
    # 重设索引
    print(df_inner.reset_index()) # 恢复索引
    # 提取4日之前的所有数据
    print(df_inner[:'2013-01-04']) # 从开始提取到这个日期

    2.按位置提取(iloc)

    # 使用iloc按位置区域提取数据
    print(df_inner.iloc[:3, :2]) # 行列
    # 使用iloc按位置单独提取数据
    print(df_inner.iloc[[025], [45]])

    3.按标签和位置提取(ix)

    # 使用ix按索引标签的位置混合提取数据
    print(df_inner.ix[:'2013-01-03', :4])

    4.按条件提取(区域和条件值)

    # 判断city列的值是否为beijing
    print(df_inner['city'].isin(['beijing']))
    # 先判断city列里是否包含beijing和shanghai,然后将复合条件的数据提取出来
    print(df_inner.loc[df_inner['city'].isin(['beijing''shanghai'])])
    category = df_inner['category_x']
    print(category)
    # 提取前三个字符,并生成数据表
    print(pd.DataFrame(category.str[:3]))

    6.数据筛选

    使用‘与’条件进行筛选

    # 筛选大于25岁并且城市为北京的这些列['id', 'city', 'age', 'category_x', 'gender']的值
    print(df_inner.loc[
    (df_inner['age'] > 25) & (df_inner['city'] == 'beijing'), ['id''city''age''category_x''gender']])

    使用‘或’条件筛选

    # 筛选大于25岁或城市为北京的这些列['id', 'city', 'age', 'category_x', 'gender']的值,并按照年龄对其进行排序
    print(df_inner.loc[
    (df_inner['age'] > 25) | (df_inner['city'] == 'beijing'), ['id''city''age''category_x',
    'gender']].sort_values(by='age'))
    print(df_inner.loc[
    (df_inner['age'] > 25) | (df_inner['city'] == 'beijing'), ['id''city''age''category_x',
    'gender']].sort_values(by='id').city.count())

    使用query函数进行筛选

    # 筛选出city列等于beijing或者shanghai的
    print(df_inner.query('city == ["beijing","shanghai"]'))
    print(df_inner.query('city == ["beijing","shanghai"]').price.sum())

    7.数据汇总

    1.分类汇总

    # 对所有列进行计数汇总
    print(df_inner.groupby('city').count())
    # 按照城市对id字段进行汇总计数
    print(df_inner.groupby('city')['id'].count())
    # 对两个字段进行汇总计数
    print(df_inner.groupby(['city''size'])['id'].count())
    # 对city字段进行汇总并计算price的合计和均值
    print(df_inner.groupby('city')['price'].agg([len, np.sum, np.mean]))

    2.数据透视

    # 数据透视表
    # 设置city为行字段,size为列字段,price为值字段
    print(pd.pivot_table(df_inner, index=["city"], values=["price"], columns=["size"],
    aggfunc=[len, np.sum], fill_value=0, margins=True))

    8.数据统计

    1.数据采样

    # 简单的数据采样(随机抽取3条数据)
    print(df_inner.sample(n=3))
    # 手动设置采样权重
    weights = [00000.50.5]
    print(df_inner.sample(n=2, weight=weights))
    # sample函数中的参数replace,用于设置采样数是否放回
    # 采样后不放回
    print(df_inner.sample(n=6, replace=False))
    # 采样后放回
    print(df_inner.sample(n=6, replace=True))

    2.描述统计

    # 数据表描述性统计
    print(df_inner.describe(),round(2).T)

    3.标准差

    print(df_inner['price'].std())

    4.协方差

    # 两个字段间的协方差
    print(df_inner['price'].cov(df_inner['m-point']))
    # 数据表中所有字段间的协方差
    print(df_inner.cov())

    5.相关分析

    print(df_inner['price'].corr(df_inner['m-point']))
    # 数据表相关性分析
    print(df_inner.corr())

    9.数据输出

    1.写入Excel

    # 输出到Excel格式
    df_inner.to_Excel('excel_to_python.xlsx',sheet_name='bluewhale')

    2.写入csv

    # 输出到CSV格式
    df_inner.to_csv('excel_to_python.csv')
  • 相关阅读:
    Tutorial中代码的区别及不同效果
    Session
    代码解析&Filter用户授权例子
    web后台运作过程
    工厂纸杯生产流水线管理系统
    Webservice和EJB
    Week8——hashcode()和equals()方法
    Week7——JSON
    Week6——Lifecycle of JSF and Facelets
    Week5——Ajax
  • 原文地址:https://www.cnblogs.com/ly803744/p/10099531.html
Copyright © 2011-2022 走看看