Pandas基础学习笔记

Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(7, 4), index=date, columns=['A', 'B', 'C', 'D'])

# 操作数据
s1 = pd.Series([1, 2, 3, np.nan, 4])  # 一维数组
date = pd.date_range('20200224', periods=7)  # 生成时间序列

# 1、pandas基本介绍
print('数据类型:', df.dtypes)
print('行:', df.index)
print('列:', df.columns)
print('值:', df.values)
print('数值类型的数据展示:', df.describe())
print('矩阵反向:', df.T)
print('列排序:', df.sort_index(axis=1, ascending=False))
print('某列值排序:', df.sort_index(by='D'))

# 2、pandas选取数据
print(df)
# 通过序列选取数据
print('序列A的数据:', df['A'])
print(df.A)
print(df['20200224': '20200226'])

# 通过标签选择:
print(df.loc['20200224'])

# 通过位置选择:
print(df.iloc[1, 1])

# 是与否选择
print(df[df.A > 0.1])

# 3、pandas设置值并处理空值
df.iloc[2, 2] = np.nan
df.loc['2020-02-24', 'B'] = np.nan
df.A[df.A > 0] = np.nan
df['F'] = np.nan  # 新增一列nan
print(df)
# axis[0, 1] 行列, how['any', 'all'] 任意一个,所有
# inplace['False', 'True'] 创建新对象,并对数据进行修改/原基础上修改数据,不创建对象
print(df.dropna(axis=1, how='all', inplace=True))  # 将每列都为空的值进行删除
df['A'].fillna(value=0, inplace=True)  # 将A列的空值填充为0
print(df.isnull())  # 判断所有数值是否为空
print(np.any(df.isnull()) == True)  # 只要有空值就返回True

print(df)

# 4、pandas导入导出数据
path = ""
df = pd.read_excel(path)
data = df.to_excel("")

# read_csv          to_csv
# read_excel        to_excel
# read_sql          to_sql
# read_json         to_json
# read_pickle       to_pickle
# read_html         to_html

# 5、pandas合并数据
df1 = pd.DataFrame(np.zeros((3, 4)), columns=['a', 'b', 'c', 'd'])
df2 = pd.DataFrame(np.ones((3, 4)), columns=['a', 'b', 'c', 'e'])
df3 = pd.DataFrame(np.ones((3, 4))*2, columns=['a', 'b', 'c', 'd'])
print(df1)
print(df2)
print(df3)

# 列头相同,进行上下合并   ignore_index: 忽略之前的索引,重新排序
print(pd.concat([df1, df3], axis=0, ignore_index=True))
# 列头不同
# join['outer', 'inner']  默认outer
print(pd.concat([df1, df2], join='inner', ignore_index=True))
# join_axes=[df1.index]) 依据df1的索引
print(pd.concat([df1, df2], axis=1, join_axes=[df1.index]))
print(df1.append([df2, df3], ignore_index=True))

# 6、merge合并
df1 = pd.DataFrame({'key': ['K1', 'K2', 'K3', 'K4'],
                     'A': ['A1', 'A2', 'A3', 'A4'],
                     'B': ['B1', 'B2', 'B3', 'B4']})

df2 = pd.DataFrame({'key': ['K1', 'K2', 'K3', 'K4'],
                     'C': ['C1', 'C2', 'C3', 'C4'],
                     'D': ['D1', 'D2', 'D3', 'D4']})

print(pd.merge(df1, df2, on='key'))  # 共用一个key

df3 = pd.DataFrame({'K1': ['K0', 'K0', 'K1', 'K2'],
                    'K2': ['K0', 'K1', 'K0', 'K1'],
                    'A': ['A0', 'A1', 'A2', 'A3'],
                    'B': ['B0', 'B1', 'B2', 'B3']})

df4 = pd.DataFrame({'K1': ['K0', 'K1', 'K1', 'K2'],
                    'K2': ['K0', 'K0', 'K0', 'K0'],
                    'C': ['C0', 'C1', 'C2', 'C3'],
                    'D': ['D0', 'D1', 'D2', 'D3']})

rs = pd.merge(df3, df4, on=['K1', 'K2'])
print(rs)

# how['inner', 'left', 'right', 'outer']  默认inner
rs2 = pd.merge(df3, df4, on=['K1', 'K2'], how='outer')
print(rs2)

# indicator 将合成的依据数据情况显示,并支持重新命名
rs3 = pd.merge(df3, df4, on=['K1', 'K2'], how='outer', indicator='合并方式')
print(rs3)

df5 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
                    'B': ['B0 ', 'B1', 'B2', 'B3']},
                    index=['K0', 'K1', 'K2', 'K3'])

df6 = pd.DataFrame({'C': ['C0', 'C1', 'C2', 'C3'],
                     'D': ['D0', 'D1', 'D2', 'D3']},
                    index=['K0', 'K1', 'K2', 'K4'])

# 依据index 合成
rs4 = pd.merge(df5, df6, left_index=True, right_index=True, how='outer')
print(rs4)

df7 = pd.DataFrame({'name': ['python', 'java', 'data'],
                    'age': [1, 2, 3]})
df8 = pd.DataFrame({'name': ['python', 'java', 'sql'],
                    'age': [4, 5, 6]})

# suffixes: 分类区分同一列名
rs5 = pd.merge(df7, df8, on='name', suffixes=['_jack', '_tom'], how='inner')
print(rs5)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值