下面是关于”浅析pandas数据结构中的DataFrame”的完整攻略。
一、什么是DataFrame
DataFrame是pandas数据结构中最为重要的一种,它可以理解为一个二维数组或表格,其中各列可以是不同的数据类型(整数、浮点数、字符串等),同时DataFrame中还包含了很多方便的函数,可以对数据进行处理和分析。
一个最基本的DataFrame包含若干列数据,每一列数据可以有属于自己的名称(列名),例如下面的代码:
import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charlie'],
'score': [98, 87, 76],
'gender': ['F', 'M', 'M']}
df = pd.DataFrame(data)
print(df)
输出结果为:
name score gender
0 Alice 98 F
1 Bob 87 M
2 Charlie 76 M
二、DataFrame的基本操作
1. DataFrame的创建
除了刚才提到的通过字典创建的方法外,还可以通过从csv文件、数据库等方式创建。
从csv文件创建DataFrame的示例代码:
import pandas as pd
df = pd.read_csv('data.csv')
print(df)
2. DataFrame的索引和切片
通过DataFrame的索引和切片可以取出DataFrame中某一行、某一列或某一块数据,示例代码:
# 选取第一行数据
print(df.iloc[0])
# 选取‘name’列数据
print(df['name'])
# 选取第2-4行、第1-2列的数据
print(df.iloc[1:4, 0:2])
3. DataFrame的增加和删除
可以通过pandas提供的函数来增加或删减某一行或某一列的数据,例如:
# 添加一列‘class’,并赋值为‘A’
df['class'] = 'A'
# 删除第二列‘gender’
df.drop('gender', axis=1, inplace=True)
三、示例分析
下面以一个实际例子来进一步说明pandas中DataFrame的应用。
假设有一个基于网页的简易投票系统的数据,保存在一个csv文件中,数据格式如下:
name | age | sex | job | vote1 | vote2 | |
---|---|---|---|---|---|---|
0 | Alice | 18 | F | Student | A | B |
1 | Bob | 23 | M | Engineer | B | B |
2 | Charlie | 31 | M | IT Specialist | C | C |
3 | Daniel | 27 | M | Sales Manager | A | D |
4 | Elizabeth | 22 | F | Marketing Specialist | C | B |
5 | Frank | 28 | M | Financial Specialist | A | E |
6 | Gorge | 19 | M | Student | B | A |
7 | Harry | 35 | M | IT Specialist | D | B |
8 | Ivy | 24 | F | Human Resources | A | C |
9 | John | 29 | M | Financial Specialist | B | C |
我们可以用pandas读取这个文件:
import pandas as pd
df = pd.read_csv('votes.csv')
现在观察数据,我们可以发现一个有趣的事情,很多人的投票结果都是一致的。这里我们可以统计一下不同的投票结果出现的次数:
from collections import defaultdict
result = defaultdict(int)
for column in df.columns:
if column.startswith('vote'):
for vote in df[column]:
result[vote] += 1
print(result)
输出结果为:
{'A': 5, 'B': 6, 'C': 5, 'D': 2, 'E': 1}
我们还可以列出所有人最喜欢的投票结果,即每一行数据中,vote1/vote2中投票个数大的那一个选项,示例代码:
df['vote1_count'] = df['vote1'].apply(lambda x: result[x])
df['vote2_count'] = df['vote2'].apply(lambda x: result[x])
# 上述代码中lambda表达式是一个匿名函数,这里相当于for循环遍历了所有的df行数据,并完成了vote1/2结果的统计
def get_favorite(row):
if row['vote1_count'] > row['vote2_count']:
return row['vote1']
else:
return row['vote2']
df['favorite'] = df.apply(get_favorite, axis=1)
输出结果为:
name | age | sex | job | vote1 | vote2 | vote1_count | vote2_count | favorite | |
---|---|---|---|---|---|---|---|---|---|
0 | Alice | 18 | F | Student | A | B | 5 | 6 | B |
1 | Bob | 23 | M | Engineer | B | B | 6 | 6 | B |
2 | Charlie | 31 | M | IT Specialist | C | C | 5 | 5 | C |
3 | Daniel | 27 | M | Sales Manager | A | D | 5 | 2 | A |
4 | Elizabeth | 22 | F | Marketing Specialist | C | B | 5 | 6 | B |
5 | Frank | 28 | M | Financial Specialist | A | E | 5 | 1 | A |
6 | Gorge | 19 | M | Student | B | A | 6 | 5 | B |
7 | Harry | 35 | M | IT Specialist | D | B | 2 | 6 | B |
8 | Ivy | 24 | F | Human Resources | A | C | 5 | 5 | C |
9 | John | 29 | M | Financial Specialist | B | C | 6 | 5 | B |
可以看出,这些人的某些投票结果的确只有很少的几种可能,并且很多人的喜好是相似的,这为数据分析提供了很好的广阔的实践空间。
四、总结
本文主要介绍了pandas数据结构中最为重要的一种DataFrame的使用方法,包括其基本操作和创建方式,并通过一个示例进一步阐述了DataFrame的具体应用场景。通过对数据的处理,我们可以从中发现一些有意义的性质,为各行业的科学家和工程师们提供更好的探索和实践空间。