【总结】Pandas DataFrame 使用方法

2 篇文章 0 订阅
2 篇文章 0 订阅

原文地址 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 np

data_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 np

data_dict = [ { 'one' : [1, 4, 7] }, { 'two' : [2, 5, 8] }, { 'three' : [3, 6, 9] } ]
data = pd.DataFrame(data_list, columns=['one','two','three'])

该组数据输出如下图

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

 

二、Dataframe整表修改

仍以该表为例

1.修改表中的列名

修改 three列 为 super列

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

输出如下图

 

2.转换列的数据类型

将 one列 数据类型 转为 str

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

 

3.设置某列为索引

设置one列为索引

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

 

4.重置表索引

data.reset_index()

 

三、Dataframe的增、删操作

现有Dataframe数据结构的data1和data2

将data2添加到data1中:

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

将data1中第n行删除:

data1 = data1.drop(labels = n)

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

import pandas as pd
import numpy as np

data_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表

数据和上文相同

 

访问 某几行 的数据

如下操作访问 第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]

输出如下

 

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()

 

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.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')

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值