原文链接 https://www.cyberlight.xyz/passage/pandas-dataframe

前段时间为参加 泰迪杯竞赛,熟悉了Pandas用法,这里做一篇记录,总结Pandas下DataFrame数据结构的各种用法。

运行环境: Ubuntu 20.04 LTS, Python 3.8.2

一、创建DataFrame

1.使用 二维列表 创建Dataframe

import pandas as pd
import numpy as npdata_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] #需要导入DataFrame的二维列表
data = pd.DataFrame(data_list, columns = ['one','two','three']) #columns为每一列的列名

该组数据输出如下图

2.使用 字典 创建Dataframe

import pandas as pd
import numpy as npdata_dict = { 'one' : [1, 4, 7] , 'two' : [2, 5, 8] , 'three' : [3, 6, 9] }
data = pd.DataFrame(data_dict)

该组数据输出如下图

由此可知,字典中的键为Dataframe的列名,值为Dataframe一列的所有数据

二、Dataframe整表修改

仍以该表为例

1.新增表中的列名

新增 four 列

columns = data1.columns.values.tolist() #获取原表列名
columns.append('four') #新增列名到列表
data1 = data1.reindex(columns = columns) #将新列名保存到表中

2.修改表中的列名

修改 three列 为 super列

data = data.rename(columns={'three':'super'})

输出如下图

3.调整表中列的顺序

将two列和three列交换顺序

data = data[['one', 'three', 'two']]

4.转换列的数据类型

将 one列 数据类型 转为 str

data['one'] = data['one'].astype("str")

5.设置某列为索引

设置one列为索引

data.set_index(["one"], inplace=True)

6.重置表索引

data.reset_index()

三、Dataframe的增、删操作

现有Dataframe数据结构的data1和data2

按行添加

将data2添加到data1中:

data1 = data1.append(data2, ignore_index=True)

按行删除

将data1中第n行删除:

data1 = data1.drop(labels = n)

按列删除

将data1中 two、three列删除

#axis默认为0时,代表删除行,axis=1时代表删除列

data1 = data1.drop(['two', 'three'], axis=1)

以如下代码创建的 data1 和 data2 为例

import pandas as pd
import numpy as npdata_list1 = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
data1 = pd.DataFrame(data_list1, columns=['one','two','three'])

data1输出为

data_list2 = [[10, 11, 12], [13, 14, 15], [16, 17, 18]]
data2 = pd.DataFrame(data_list2, columns=['one','two','three'])

data2输出为

现将data2添加到data1后面

# ignore_index=True 会忽略data2的索引,自动计算索引添加到data1
data1 = data1.append(data2, ignore_index=True)

输出为

现在将data1中第4行删除

data1 = data1.drop(labels = 4)

输出为

四、访问Dataframe

1.数据定位

这里只介绍通过loc定位

loc用法

loc[index, column_name] #index为Dataframe的索引,column_name为列名

若您尚不明白索引,请点击此处访问Pandas官方文档

现在仍然以下图数据为例,

访问某行某列的数据

访问 第2行 列名two 的数据,正确操作如下

data.loc[1, 'two']

该操作的输出为5

访问某行的数据

访问第2行的数据

data.loc[1]

该操作的输出为

one      4
two      5
three    6
Name: 1, dtype: int64

访问某列的数据

访问 列名为two 的数据

data.loc[:]['two']

该操作的输出为

0    2
1    5
2    8
Name: two, dtype: int64

2.访问DataFrame表

数据和上文相同

访问所有列名

data.columns.values.tolist()

访问所有行名

data._stat_axis.values.tolist()

访问 某几行 的数据

如下操作访问 第1到2行 的数据

data[0:2] #访问第1行到第2行的数据。取第1行的数据,不取第3行的数据(左闭右开)

访问 某列 或 几列 的数据

访问 one列

data['one'] 或 data.one

访问 one列 和 two列

data[['one', 'two']]

通过head访问前n行

访问前2行的数据

data.head(2)

通过tail访问后n行

访问后2行的数据

data.tail(2)

五、遍历Dataframe

示例说明

现在遍历该表

#index 为 遍历出的索引
#row 为 遍历出的行
for index, row in data.iterrows():print(index) # index为该行的索引print(row['one']) # row['one'] 或 row['two'] 为该行 one列 对应的数据print('')

以上代码的输出如下图所示

若需要对遍历出的数据进行修改,请使用前文 第三点第1点 数据定位 的方法修改数据

六、Dataframe对应的SQL操作

示例数据

1.SELECT

选择 one、two 列的数据

SQL语句

SELECT one, two FROM data LIMIT 2

Python语句

data[['one', 'two']].head(2)

输出如下

2.WHERE

SQL语句

SELECT * FROM data WHERE two = 2

Python语句

data[data['two'] == 2]

输出如下

若选择出的DataFrame为具体某一格,可在对象后加上.values[0]获取方格内的值

SQL语句 (and)

SELECT * FROM data WHERE one = 4 and two = 5

Python语句

data[(data['one'] == 4) & (data['two'] == 5)]

输出如下

SQL语句 (or)

SELECT * FROM data WHERE one = 1 or two = 3

Python语句

data[(data['one'] == 1) | (data['two'] == 3)]

3.Group By

SQL语句 (分组时计数)

SELECT one, two, COUNT(*) FROM data GROUP BY one

Python语句

#as_index = False 避免将 被分组的列 作为索引
data.groupby(['one', 'two'], as_index = False).size()
#.size()返回的是serise,不受as_index = False影响
#如果不需要分组时计数,只需要分组时保留未分组列的每个分组集的第一行数据,则将 .size() 改为 .first() 即可

SQL语句 (分组时求和)

SELECT one, two, SUM(three) FROM data GROUP BY one

Python语句

#as_index = False 避免将 被分组的列 作为索引
data.groupby(['one', 'two'], as_index = False)['three'].sum()

若是求平均值,将 .sum() 改为 .mean()

SQL语句 (分组时对不同列进行不同操作)

SELECT one, COUNT(*), SUM(three) FROM data GROUP BY one, two

Python语句

data.groupby('one', as_index = False).agg({'two': np.size, 'three': np.sum})

七、DataFrame排序

示例数据

# ascending=False 降序
# ignore_index=True 忽略索引,排序后重置索引
data = data.sort_values(by = 'two',  ascending=False, ignore_index=True)

输出内容

八、数据清洗相关操作

data.describe() #查看数据的基本情况

data.isnull().sum() #显示每一列中有多少个缺失值

data = data.fillna(0) #使用0填充缺失值

data.列名.value_counts() #统计某列中 唯一值 出现的次数

data = data.drop_duplicates() #去掉重复行

九、CSV文件输入输出

import pandas as pd
import numpy as np#pd解决中文编码问题
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)#输入csv #encoding为编码
data = pd.read_csv('input.csv', encoding = "gb2312")#输出csv
data.to_csv('output.csv')

one方法报错 select_【总结】Pandas DataFrame 使用方法相关推荐

  1. one方法报错 select_使用mybatisplus中的selectone方法,查询一条信息。报错

    错误信息:java.sql.SQLSyntaxErrorException: Unknown column 'productNumber' in 'where clause'' 问题所在: 错误信息中 ...

  2. java 实现接口后重写方法报错

    java 实现接口后重写方法报错 java 实现接口后重写方法报错 The method contextDestroyed(ServletContextEvent) of type InitListe ...

  3. Python调用seek(pos,mode)方法报错Can‘t do nonzero cur-relative seeks

    在Python中IO操作调用seek(pos,mode)方法时,出现异常错误:OSError:Can't do nonzero cur-relative seeks其示例代码如下: from io i ...

  4. python3中input()方法报错traceback变量未定义的解决方法

    python3中input()方法报错traceback变量未定义的解决方法 参考文章: (1)python3中input()方法报错traceback变量未定义的解决方法 (2)https://ww ...

  5. torchtext Filed 方法报错解决办法

    torchtext Filed 方法报错解决办法 问题1 拿到的源代码是这样的 报错: AttributeError: module 'torchtext.data' has no attribute ...

  6. uEditor setContent方法报错Uncaught TypeError: Cannot read property ‘innerHTML‘ of undefined

    uEditor setContent方法报错Uncaught TypeError: Cannot read property 'innerHTML' of undefined 报错信息 解决方法 报错 ...

  7. 基于adversarial-robustness-toolbox(ART)包进行AI对抗攻击ZOO攻击方法报错

    基于adversarial-robustness-toolbox(ART)包进行AI对抗攻击ZOO攻击方法报错 环境 问题分析 问题解决 ZooAttack类使用扩展 环境 ART版本:1.14.0 ...

  8. 快速解决Android studio native 方法报错

    反编译一个游戏项目,发现native方法报错.如图: 项目是通过加载动态链接库so,没有jni的源码,导致native方法有红色波浪线,我们可以关闭android studio的jni支持. 点击An ...

  9. getSupportFragmentManager().beginTransaction().add方法报错

    图中红线报错时,发现明明一样但是无论如何改都会报错,这时候就要注意Fragment文件的extends导入的方法,它可能是导入的包不对 如图所示,Fragment有两个包,如果导入的是Android. ...

最新文章

  1. 嵌入式学习笔记之四 (uboot启动流程)
  2. 集成显卡+独立显卡实现三屏显示
  3. 社交牛逼症研发小哥的校招和入职初体验
  4. 开发常见单词Java
  5. boost::mpl::vector用法的测试程序
  6. ie打开完成,网页显示空白
  7. linux 内核移植和根文件系统的制作【转载】
  8. bwa比对软件的使用以及其结果文件(sam)格式说明
  9. 一位JAVA程序员的七夕情书——致未来的另一半
  10. HTTP Status 404 -(tomcat,springmvc,ModelAndView)
  11. swing JTable学习(七)—TableModelListener
  12. 新加坡读计算机专业,【去新加坡读计算机专业】 - 环外新加坡留学网
  13. 火狐浏览器看视频经常卡顿,没反应的解决办法
  14. 使用树莓派3B+ 制作一个属于自己的无线AP 无线路由器 一个Wi-Fi热点
  15. #运算符 ##预算符
  16. SRGAN 论文学习
  17. 2023王道数据结构考研习题汇总
  18. 仿淘宝详情页 直接上代码
  19. 程序员必读经典书籍推荐
  20. 新一代科学教育标准到底是什么?为什么开展 STEM 教育?

热门文章

  1. 自编自导自演年会节目《程序员》
  2. Windows 服务器开机自启动
  3. ASP.NET BookMark
  4. Mysqldump参数大全
  5. DJANGO获取用户访问IP
  6. CentOS7 虚拟机最小化安装
  7. SolrCloud和MultiCore的区别
  8. ssh开发实战之整合篇
  9. Silverlight Telerik控件学习:带CheckBox复选框的树形TreeView控件
  10. 关于Silverlight安装问题之二