one方法报错 select_【总结】Pandas DataFrame 使用方法
原文链接 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为每一列的列名
该组数据输出如下图
![](/assets/blank.gif)
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)
该组数据输出如下图
![](/assets/blank.gif)
由此可知,字典中的键为Dataframe的列名,值为Dataframe一列的所有数据
二、Dataframe整表修改
仍以该表为例
![](/assets/blank.gif)
1.新增表中的列名
新增 four 列
columns = data1.columns.values.tolist() #获取原表列名
columns.append('four') #新增列名到列表
data1 = data1.reindex(columns = columns) #将新列名保存到表中
2.修改表中的列名
修改 three列 为 super列
data = data.rename(columns={'three':'super'})
输出如下图
![](/assets/blank.gif)
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输出为
![](/assets/blank.gif)
data_list2 = [[10, 11, 12], [13, 14, 15], [16, 17, 18]]
data2 = pd.DataFrame(data_list2, columns=['one','two','three'])
data2输出为
![](/assets/blank.gif)
现将data2添加到data1后面
# ignore_index=True 会忽略data2的索引,自动计算索引添加到data1
data1 = data1.append(data2, ignore_index=True)
输出为
![](/assets/blank.gif)
现在将data1中第4行删除
data1 = data1.drop(labels = 4)
输出为
![](/assets/blank.gif)
四、访问Dataframe
1.数据定位
这里只介绍通过loc定位
loc用法
loc[index, column_name] #index为Dataframe的索引,column_name为列名
若您尚不明白索引,请点击此处访问Pandas官方文档
现在仍然以下图数据为例,
![](/assets/blank.gif)
访问某行某列的数据
访问 第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表
数据和上文相同
![](/assets/blank.gif)
访问所有列名
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
示例说明
![](/assets/blank.gif)
现在遍历该表
#index 为 遍历出的索引
#row 为 遍历出的行
for index, row in data.iterrows():print(index) # index为该行的索引print(row['one']) # row['one'] 或 row['two'] 为该行 one列 对应的数据print('')
以上代码的输出如下图所示
![](/assets/blank.gif)
若需要对遍历出的数据进行修改,请使用前文 第三点第1点 数据定位 的方法修改数据
六、Dataframe对应的SQL操作
示例数据
![](/assets/blank.gif)
1.SELECT
选择 one、two 列的数据
SQL语句
SELECT one, two FROM data LIMIT 2
Python语句
data[['one', 'two']].head(2)
输出如下
![](/assets/blank.gif)
2.WHERE
SQL语句
SELECT * FROM data WHERE two = 2
Python语句
data[data['two'] == 2]
输出如下
![](/assets/blank.gif)
若选择出的DataFrame为具体某一格,可在对象后加上.values[0]获取方格内的值
SQL语句 (and)
SELECT * FROM data WHERE one = 4 and two = 5
Python语句
data[(data['one'] == 4) & (data['two'] == 5)]
输出如下
![](/assets/blank.gif)
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排序
示例数据
![](/assets/blank.gif)
# ascending=False 降序
# ignore_index=True 忽略索引,排序后重置索引
data = data.sort_values(by = 'two', ascending=False, ignore_index=True)
输出内容
![](/assets/blank.gif)
八、数据清洗相关操作
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 使用方法相关推荐
- one方法报错 select_使用mybatisplus中的selectone方法,查询一条信息。报错
错误信息:java.sql.SQLSyntaxErrorException: Unknown column 'productNumber' in 'where clause'' 问题所在: 错误信息中 ...
- java 实现接口后重写方法报错
java 实现接口后重写方法报错 java 实现接口后重写方法报错 The method contextDestroyed(ServletContextEvent) of type InitListe ...
- 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 ...
- python3中input()方法报错traceback变量未定义的解决方法
python3中input()方法报错traceback变量未定义的解决方法 参考文章: (1)python3中input()方法报错traceback变量未定义的解决方法 (2)https://ww ...
- torchtext Filed 方法报错解决办法
torchtext Filed 方法报错解决办法 问题1 拿到的源代码是这样的 报错: AttributeError: module 'torchtext.data' has no attribute ...
- uEditor setContent方法报错Uncaught TypeError: Cannot read property ‘innerHTML‘ of undefined
uEditor setContent方法报错Uncaught TypeError: Cannot read property 'innerHTML' of undefined 报错信息 解决方法 报错 ...
- 基于adversarial-robustness-toolbox(ART)包进行AI对抗攻击ZOO攻击方法报错
基于adversarial-robustness-toolbox(ART)包进行AI对抗攻击ZOO攻击方法报错 环境 问题分析 问题解决 ZooAttack类使用扩展 环境 ART版本:1.14.0 ...
- 快速解决Android studio native 方法报错
反编译一个游戏项目,发现native方法报错.如图: 项目是通过加载动态链接库so,没有jni的源码,导致native方法有红色波浪线,我们可以关闭android studio的jni支持. 点击An ...
- getSupportFragmentManager().beginTransaction().add方法报错
图中红线报错时,发现明明一样但是无论如何改都会报错,这时候就要注意Fragment文件的extends导入的方法,它可能是导入的包不对 如图所示,Fragment有两个包,如果导入的是Android. ...
最新文章
- 嵌入式学习笔记之四 (uboot启动流程)
- 集成显卡+独立显卡实现三屏显示
- 社交牛逼症研发小哥的校招和入职初体验
- 开发常见单词Java
- boost::mpl::vector用法的测试程序
- ie打开完成,网页显示空白
- linux 内核移植和根文件系统的制作【转载】
- bwa比对软件的使用以及其结果文件(sam)格式说明
- 一位JAVA程序员的七夕情书——致未来的另一半
- HTTP Status 404 -(tomcat,springmvc,ModelAndView)
- swing JTable学习(七)—TableModelListener
- 新加坡读计算机专业,【去新加坡读计算机专业】 - 环外新加坡留学网
- 火狐浏览器看视频经常卡顿,没反应的解决办法
- 使用树莓派3B+ 制作一个属于自己的无线AP 无线路由器 一个Wi-Fi热点
- #运算符 ##预算符
- SRGAN 论文学习
- 2023王道数据结构考研习题汇总
- 仿淘宝详情页 直接上代码
- 程序员必读经典书籍推荐
- 新一代科学教育标准到底是什么?为什么开展 STEM 教育?