程序开发笔记-python数据分析处理工具-Pandas(一)

Pandas

介绍:记录一下笔记,方便以后迅速回忆使用。

1.Pandas 数据结构

  • 导入所需的库
import numpy as np
import pandas as pd

  • series有点像python的字典

[1].创建Series

  • 1.普通创建
def CreatSeries():
    """普通创建"""
    mylist = list('abc')
    ser1 = pd.Series(mylist)

    myarr = np.arange(3)
    ser2 = pd.Series(myarr)

    mydict = dict(zip(mylist, myarr))
    ser3 = pd.Series(mydict)

    print("{}\n{}\n{}\n".format(ser1, ser2, ser3))

    ser4 = pd.Series([1, 2, 5], index=['apple', 'banana', 'peach'])
    print(ser4[2])
  • 2.从Python字典对象创建Series
def CreatSeries():
    my_dict = {'a': 29, 'b': 994, '5': 94}
    ser1 = pd.Series(my_dict)
    print(ser1)
    """ 访问 Series 里的数据的方式,和 Python 字典基本一样:"""

[2].对 Series 进行算术运算操作

    myarr1 = np.arange(2, 7)
    myarr2 = np.arange(1, 4)
    ser2 = pd.Series(myarr1)
    ser3 = pd.Series(myarr2)
    print("加:\n{}\n减:\n{}\n乘:\n{}\n除:\n{}\n".format(ser2 + ser3, ser2 - ser3, ser2 * ser3, ser2 / ser3))

[1].创建DataFrame数据

  • 形式1
dict_data = {
        'id': ["0", "1", "2"],
        'student': ["Li Lei", "Han Meimei", "Tom"],
        'score': [95, 98, 92],
        'gender': ['M', 'F', 'M']
    }
DF_data = pd.DataFrame(dict_data, columns=['id', 'gender', 'student', 'score'])
print(DF_data)
  • 输出结果:
  id gender     student  score
0  0      M      Li Lei     95
1  1      F  Han Meimei     98
2  2      M         Tom     92
  • 形式2
df = {'Name': pd.Series(['Jon', 'Aaron', 'Todd'], index=['a', 'b', 'c']),
       'Age': pd.Series(['18', '19', '20', '21'], index=['a', 'b', 'c', 'd']),
       'Nationality': pd.Series(['Us', 'China', 'China'], index=['a', 'b', 'c'])}
ser1 = pd.DataFrame(df)
print(ser1)
  • 输出结果:
    Name Age Nationality
a    Jon  18          Us
b  Aaron  19       China
c   Todd  20       China
d    NaN  21         NaN

[2].向 DataFrame 里增加数据列

ser2['Time'] = [2001, 2002, 1999, 1998]
ser2['Nowtime'] = ser2['Time'] + ser2['Age']

[3].向 DataFrame 里删除数据列

"""从 DataFrame 里删除行/列,xis=0 对应的是行 row,而 axis=1 对应的是列 column 。"""
print(ser2.drop('Nowtime',axis=1))
print(ser2.drop('d',axis=0))

"""请务必记住,除非用户明确指定,否则在调用 .drop() 的时候,Pandas 并不会真的永久性地删除这行/列。这主要是为了防止用户误操作丢失数据。"""

ser2.drop('d', axis=0, inplace=True)

[4].获取 DataFrame 中的一行或多行数据


 print(ser2.loc['a'])
 print(ser2.iloc[0])
 print(ser2.iloc[[0,1,2]])

[1].生成一个子数据表

ser3 = ser2.iloc[[0,1,2]]
ser3 = ser2.loc[['a', 'b'], ['Name', 'Age']]

[2].条件筛选

 ser4 = pd.DataFrame(np.random.randn(5, 4), ['A', 'B', 'C', 'D', 'E'], ['W', 'X', 'Y', 'Z'])
 print(ser4[ser4['W']>0])
 print(ser4[ser4['W'] > 0][['X','Y']])
 print( ser4[(ser4['W'] > 0)&(ser4['X']>0)] )

[3].重置 DataFrame 的索引

print(ser4.reset_index())
"""和删除操作差不多,.reset_index() 并不会永久改变你表格的索引,除非你调用的时候明确传入了 inplace 参数,比如:.reset_index(inplace=True)"""

[4].设置 DataFrame 的索引值

  ser4['ID'] = ['1', '2', '3', '4', '5']
  print(ser4.set_index('ID'))

[1].多级索引(MultiIndex)以及命名索引的不同等级


    outside = ['0 Level', '0 Level', '0 Level', 'A Level', 'A Level', 'A Level']
    inside = [21, 22, 23, 22, 25, 22]
    my_index = list(zip(outside, inside))
    sre1 = pd.MultiIndex.from_tuples(my_index)
    sre2 = pd.DataFrame(np.random.randn(6, 2), index=sre1, columns=['A', 'B'])
    print("sre2:\n", sre2, "\n")
    print("sre2.loc['0 Level'].loc[21]:\n", sre2.loc['0 Level'].loc[21], "\n")
    sre2.index.names = ['Lecels', 'Num']
    print("为索引命名:\n", sre2, "\n")

    print("找到所有 Levels 中,Num = 22 的行:\n", sre2.xs(22, level='Num'))
  • 输出结果:
sre2:
                    A         B
0 Level 21  0.608813 -0.371427
        22 -0.774077  0.487629
        23  0.946066 -0.195156
A Level 22 -1.613374 -0.245341
        25 -0.976701 -0.076784
        22  0.333692  0.438889

sre2.loc['0 Level'].loc[21]:
 A    0.608813
B   -0.371427
Name: 21, dtype: float64

为索引命名:
                     A         B
Lecels  Num
0 Level 21   0.608813 -0.371427
        22  -0.774077  0.487629
        23   0.946066 -0.195156
A Level 22  -1.613374 -0.245341
        25  -0.976701 -0.076784
        22   0.333692  0.438889

找到所有 Levels 中,Num = 22 的行:
                 A         B
Lecels
0 Level -0.774077  0.487629
A Level -1.613374 -0.245341
A Level  0.333692  0.438889

Process finished with exit code 0

[2].数据清洗

  • 删除或填充空值
"""dropna() 来丢弃这些自动填充的值"""
sre3 = {'A': [1, np.nan, 3], 'B': [2, np.nan, np.nan], 'C': [4, 5, 6]}
sre3 = pd.DataFrame(sre3)
print("操作前", sre3)

print("删除列后:\n", sre3.dropna())
print("删除行后:\n", sre3.dropna(axis=1))

"""填充空值,用fillna() 来自动给这些空值填充数据。"""

print("将表中所有 NaN 替换成 20:\n", sre3.fillna('20'))
  • 输出结果:
操作前      A    B  C
0  1.0  2.0  4
1  NaN  NaN  5
2  3.0  NaN  6
删除列后:
      A    B  C
0  1.0  2.0  4
删除行后:
    C
0  4
1  5
2  6
将表中所有 NaN 替换成 20:
     A   B  C
0   1   2  4
1  20  20  5
2   3  20  6

[1].分组统计


    ser1 = {'Company': ['Google', 'Google', 'Google', 'ORACLE', 'TWITER', 'TWITER'],
            'Person': ['Sam', 'Charline', 'Amy', 'Vanessa', 'Garl', 'Sarah'],
            'Sales': [200, 120, 340, 124, 243, 350]}
    ser1 = pd.DataFrame(ser1)
    print(ser1)
    print('\n')

    print(ser1.groupby('Company').mean())

    print(ser1.groupby('Company').count())

    print(ser1.groupby('Company').describe())

    print(ser1.groupby('Company').describe().transpose())

    print(ser1.groupby('Company').describe().transpose()['Google'])

[2].堆叠(Concat)

pd.concat([ser1,ser2])
pd.concat([ser1, ser2],axis=1)

    df = {'Name': pd.Series(['Jon', 'Aaron', 'Todd', 'ko'], index=['a', 'b', 'c', 'd']),
          'Age': pd.Series(['18', '19', '20', '21'], index=['a', 'b', 'c', 'd']),
          'Nationality': pd.Series(['Us', 'China', 'China', 'Us'], index=['a', 'b', 'c', 'd']),
          'ID': pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
    ser1 = pd.DataFrame(df)

    df = {'Bookname': pd.Series(['Jonk', 'Aaronk', 'Toddk', 'kok'], index=['a', 'b', 'c', 'd']),
          'Time': pd.Series(['1920', '1928', '2021', '2120'], index=['a', 'b', 'c', 'd']),
          'Nationality': pd.Series(['Us', 'China', 'China', 'Us'], index=['a', 'b', 'c', 'd']),
          'ID': pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
    ser2 = pd.DataFrame(df)

    print(pd.concat([ser1,ser2]))
    print(pd.concat([ser1, ser2],axis=1))

[3].归并(Merge)


    print(pd.merge(ser1, ser2, how='inner', on='ID'))

    print(pd.merge(ser1, ser2, how='inner', on=['ID','Nationality']))

[4].连接(Join)


   print(ser1.join(ser2,how='outer'))

[5].数值处理


    ser3 = pd.DataFrame({'col1': [1, 2, 3, 4], 'col2': [444, 555, 444, 666], 'col3': ['a', 'b', 'a', 'c']},
                        index=[0, 1, 2, 3])

    print(ser3.head())

    print(ser3['col2'].unique())

    print(ser3['col2'].nunique())

    print(ser3['col2'].value_counts())

[6].apply()方法


    def square(x):
        return x * x

    print(ser3['col1'])
    print(ser3['col1'].apply(square))

    print(ser3['col3'].apply(len))

    print(ser3['col1'].apply(lambda x:x*x))

[7].其他操作


    print(ser1.columns)

    print(ser3.sort_values('col2'))

    print(ser3.isnull())

[8].数据透视表


    data = {
        'A': ['dog', 'dog', 'dog', 'goat', 'goat', 'goat'],
        'B': ['brown', 'brown', 'black', 'black', 'brown', 'brown'],
        'C': ['x', 'y', 'x', 'y', 'x', 'y'],
        'D': [1, 3, 2, 5, 4, 1]
    }
    ser1 = pd.DataFrame(data)
    print(ser1)

    print(pd.pivot_table(ser1,values='D',index=['A','B'],columns=['C']))

    print(ser1.pivot_table(values='D', index=['A', 'B'], columns=['C']))

  • 数据准备
    data = {
        'A': ['dog', 'dog', 'dog', 'goat', 'goat', 'goat'],
        'B': ['brown', 'brown', 'black', 'black', 'brown', 'brown'],
        'C': ['x', 'y', 'x', 'y', 'x', 'y'],
        'D': [1, 3, 2, 5, 4, 1]
    }
    ser1 = pd.DataFrame(data)

[1].文本文件、csv文件

  • 使用read_table来读取文本文件。
pandas.read_table(filepath_or_buffer, sep='\t', header='infer', names=None, index_col=None, dtype=None, engine=None, nrows=None)
  • 使用read_csv函数来读取csv文件。
pandas.read_csv(filepath_or_buffer, sep=',', header='infer', names=None, index_col=None, dtype=None, engine=None, nrows=None)
  • read_table和read_csv常用参数及其说明。
    程序开发笔记-python数据分析处理工具-Pandas(一)
  • 其他事项
read_table和read_csv函数中的sep参数是指定文本的分隔符的,如果分隔符指定错误,在读取数据的时候,每一行数据将连成一片。
header参数是用来指定列名的,如果是None则会添加一个默认的列名。
encoding代表文件的编码格式,常用的编码有utf-8、utf-16、gbk、gb2312、gb18030等。如果编码指定错误数据将无法读取,IPython解释器会报解析错误
  • 文本文件的存储
  • 文本文件的存储和读取类似,结构化数据可以通过pandas中的to_csv函数实现以csv文件格式存储文件。
DataFrame.to_csv(path_or_buf=None, sep=',', na_rep=", columns=None, header=True, index=True,index_label=None,mode='w',encoding=None)

程序开发笔记-python数据分析处理工具-Pandas(一)

演示:

  • 写入 CSV 文件

ser1.to_csv('example.csv', index=False)

  • 读取 CSV 文件

ser2 = pd.read_csv('example.csv')
print(ser2)

[2].Excel 表格文件

  • to_csv方法的常用参数基本一致,区别之处在于指定存储文件的文件路径参数名称为excel_writer,并且没有sep参数,增加了一个sheetnames参数用来指定存储的Excel sheet的名称,默认为sheet1。
DataFrame.to_excel(excel_writer=None, sheetname=None', na_rep=", header=True, index=True, index_label=None, mode='w', encoding=None)

ser1.to_excel('excel.xlsx', sheet_name='Sheet1')

ser2 = pd.read_excel('excel.xlsx', sheet_name='Sheetl')

[3].HTML 文件


ser3 = pd.read_html('file:///D:/phpstudy_pro/WWW/www.test.com/index.php')
print(ser3[0])

Original: https://blog.csdn.net/weixin_46703850/article/details/113872544
Author: 一个平凡de人
Title: 程序开发笔记-python数据分析处理工具-Pandas(一)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/755903/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • pandas学习

    import pandas as pdimport matplotlib.pyplot as plt plt.rcParams[‘font.sans-serif&#82…

    Python 2023年8月19日
    053
  • Pandas简介

    pandas.Series(data,index,dtype,copy) data:支持多种数据类型 index:索引值必须是唯一的,与data的长度相同 dtype:数据类型 c…

    Python 2023年8月22日
    0200
  • python中matplotlib调整图例位置

    matplotlib画图例默认的位置是在图中的各个角落,但有时图例位置会遮挡住图像而不符合我们的需求,需要对图例位置进行调整。代码如下: plt.legend(loc=&#8217…

    Python 2023年8月30日
    088
  • pytest测试框架

    源代码: 链接:https://pan.baidu.com/s/18o1qE91TUiesagdb_kGO4Q提取码:ce71 pytest插件: allure-pytest:更好…

    Python 2023年9月14日
    055
  • python实现贪吃蛇小游戏

    运行效果 文章目录 运行效果 1.开发环境 2.数据结构 3. 设计思路 * 3.1 贪吃蛇移动问题 3.2 贪吃蛇吃食物问题 3.3 贪吃蛇加长身段问题 3.4 游戏结束判定 3…

    Python 2023年9月23日
    071
  • pip执行报错,pip换源,以及pygame如何导入pycharm

    一. 解决pip报错问题pip 是 Python 包管理工具,该工具提供了对Python 包的查找、下载、安装、卸载的功能。 目前如果在 python.org 下载最新版本的安装包…

    Python 2023年9月18日
    043
  • [pytorch学习笔记] 2. tensor 张量

    张量初始化 1.张量可以直接从数据中创建。 数据类型是自动推断的。 2.张量通过numpy 中的数组进行初始化。 3.通过别的张量进行初始化 4.使用随机数或常数初始化: Tens…

    Python 2023年8月27日
    064
  • python中rcparams_Matplotlib中rcParams使用方法

    主要作用为指定图片像素: matplotlib.rcParams[‘figure.figsize’]#图片像素 matplotlib.rcParams[&#…

    Python 2023年9月5日
    056
  • Windows11+wsl2+cuda+conda+pytorch安装记录之处处都是坑

    由于代码在windows上运行总是抛奇奇怪怪的错误,一怒之下换linux环境运行,win11自带的wsl很方便,在各种博客找了n多教程,历时两天,终于安装好了环境,配置这个环境的目…

    Python 2023年9月9日
    0125
  • 银行营销数据分析—Python(numpy、pandas、matplotlib)

    数据分析【Python】 项目介绍 我的理解 了解数据 * 源数据解析 源数据概况 数据处理 数据分析 * 数据展示分析 影响因素分析 分析总结 项目介绍 数据来源:kaggle银…

    Python 2023年8月23日
    093
  • Python图像处理丨基于OpenCV和像素处理的图像灰度化处理

    摘要:本篇文章讲解图像灰度化处理的知识,结合OpenCV调用cv2.cvtColor()函数实现图像灰度操作,使用像素处理方法对图像进行灰度化处理。 本篇文章讲解图像灰度化处理的知…

    Python 2023年5月23日
    079
  • 【Linux】权限管理

    👑作者主页:@安 度 因🏠学习社区:安度因的学习社区📖专栏链接:Linux 文章目录 一、shell 命令以及运行原理 二、Linux的用户权限 * 1、权限概念引入 2、用户分类…

    Python 2023年9月30日
    065
  • 100行的python作品详解_100行Python代码,完成一个打地鼠小游戏!

    ↑关注 + 星标 ,每天学Python新技能 后台回复【大礼包】送你Python自学大礼包 最近在学习使用 Python 来完成一些小游戏,使用到的有 Pygame 和 PyQt5…

    Python 2023年9月23日
    056
  • python axes.titlesize_Seaborn笔记一:设置图像样式及元素大小

    Seaborn Tutorial Introduction 在数据分析中,画图极为重要。在分析过程中以及最后的分析结果中都需要利用直观的图表去分析,展示数据特点,以便挖掘出有价值的…

    Python 2023年9月6日
    062
  • Scrapy 项目 Item 数据基础使用

    回答1: 是一款功能强大的Python网络爬虫框架,可用于抓取和提取网页 。以下是 爬取和解析的一些基本步骤: 1. 创建一个 :在命令行中 startproject projec…

    Python 2023年10月3日
    046
  • Python异常

    目标: 异常的概念 捕获异常 异常传递 自定义异常 1.异常的概念 在程序运行时,如果Python解释器遇到一个错误,会停止程序的执行,并提示一些错误信息,这就是异常 程序停止执行…

    Python 2023年5月25日
    0110
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球