PythonPandas基础操作详解
简介
PythonPandas是一款开源的数据处理库,其操作和数据结构与Excel类似,且支持导入和导出多种数据格式,包括CSV、JSON、SQL、Excel等。
PythonPandas的核心数据结构是DataFrame,可以将不同格式的文件转化为DataFrame,方便进行数据清洗、转换、分析和建模等操作。
本攻略将详细讲解PythonPandas基础操作,包括创建DataFrame、数据选取及操作、数据过滤、数据排序、数据合并和重塑等。
创建DataFrame
最常见的创建DataFrame的方法是使用字典,其中字典的key就是DataFrame的列名,value就是每列对应的数据。
示例1:通过字典创建DataFrame
import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charlie', 'David'],
'age': [25, 32, 18, 47],
'gender': ['F', 'M', 'M', 'M']}
df = pd.DataFrame(data)
print(df)
输出:
name age gender
0 Alice 25 F
1 Bob 32 M
2 Charlie 18 M
3 David 47 M
另一种创建DataFrame的方法是使用Numpy数组,其中Numpy数组的每一行对应DataFrame的一行,每一列对应DataFrame的一列。
示例2:通过Numpy数组创建DataFrame
import numpy as np
import pandas as pd
data = np.array([['Alice', 25, 'F'],
['Bob', 32, 'M'],
['Charlie', 18, 'M'],
['David', 47, 'M']])
df = pd.DataFrame(data, columns=['name', 'age', 'gender'])
print(df)
输出:
name age gender
0 Alice 25 F
1 Bob 32 M
2 Charlie 18 M
3 David 47 M
数据选取及操作
选取DataFrame的某一列可以使用列名,也可以使用列的索引。
示例3:选取DataFrame的某一列
import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charlie', 'David'],
'age': [25, 32, 18, 47],
'gender': ['F', 'M', 'M', 'M']}
df = pd.DataFrame(data)
# 选取age列
age = df['age']
print(age)
# 选取gender列
gender = df.iloc[:, 2] # iloc方法以列的索引选取
print(gender)
输出:
0 25
1 32
2 18
3 47
Name: age, dtype: int64
0 F
1 M
2 M
3 M
Name: gender, dtype: object
对选取的列进行操作,例如计算平均值和标准差,可以使用DataFrame的方法。
示例4:对选取的列进行操作
import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charlie', 'David'],
'age': [25, 32, 18, 47],
'gender': ['F', 'M', 'M', 'M']}
df = pd.DataFrame(data)
# 计算age列的平均值和标准差
age_mean = df['age'].mean()
age_std = df['age'].std()
print('age的平均值为{},标准差为{}'.format(age_mean, age_std))
输出:
age的平均值为30.5,标准差为12.353902904506923
数据过滤
根据DataFrame中数据的条件进行过滤是常见的操作。
示例5:根据DataFrame中数据的条件进行过滤
import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charlie', 'David'],
'age': [25, 32, 18, 47],
'gender': ['F', 'M', 'M', 'M']}
df = pd.DataFrame(data)
# 选取age>30的行
age_gt_30 = df[df['age'] > 30]
print(age_gt_30)
# 选取gender为M的行
gender_M = df[df['gender'] == 'M']
print(gender_M)
输出:
name age gender
1 Bob 32 M
3 David 47 M
name age gender
1 Bob 32 M
2 Charlie 18 M
3 David 47 M
数据排序
对DataFrame中的数据进行排序,可以使用sort_values方法。
示例6:对DataFrame中的数据进行排序
import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charlie', 'David'],
'age': [25, 32, 18, 47],
'gender': ['F', 'M', 'M', 'M']}
df = pd.DataFrame(data)
# 按照age升序排列
df_sort_age_asc = df.sort_values(by='age')
print(df_sort_age_asc)
# 按照age降序排列,且对age相同时按照name升序排列
df_sort_age_desc_name_asc = df.sort_values(by=['age', 'name'], ascending=[False, True])
print(df_sort_age_desc_name_asc)
输出:
name age gender
2 Charlie 18 M
0 Alice 25 F
1 Bob 32 M
3 David 47 M
name age gender
3 David 47 M
1 Bob 32 M
0 Alice 25 F
2 Charlie 18 M
数据合并和重塑
将多个DataFrame合并成一个DataFrame,常见的方法是使用concat方法以行或列的方式进行合并。
示例7:使用concat方法以行或列的方式进行合并
import pandas as pd
data1 = {'name': ['Alice', 'Bob', 'Charlie', 'David'],
'age': [25, 32, 18, 47],
'gender': ['F', 'M', 'M', 'M']}
df1 = pd.DataFrame(data1)
data2 = {'name': ['Emily', 'Fred', 'George', 'Helen'],
'age': [19, 27, 41, 35],
'gender': ['F', 'M', 'M', 'F']}
df2 = pd.DataFrame(data2)
# 按照行合并两个DataFrame
df_concat_row = pd.concat([df1, df2])
print(df_concat_row)
# 按照列合并两个DataFrame
df_concat_column = pd.concat([df1, df2], axis=1)
print(df_concat_column)
输出:
name age gender
0 Alice 25 F
1 Bob 32 M
2 Charlie 18 M
3 David 47 M
0 Emily 19 F
1 Fred 27 M
2 George 41 M
3 Helen 35 F
name age gender name age gender
0 Alice 25 F Emily 19 F
1 Bob 32 M Fred 27 M
2 Charlie 18 M George 41 M
3 David 47 M Helen 35 F
对DataFrame进行重塑,包括pivot和melt操作。
示例8:使用pivot和melt对DataFrame进行重塑
import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charlie', 'David', 'Emily', 'Fred', 'George', 'Helen'],
'age': [25, 32, 18, 47, 19, 27, 41, 35],
'gender': ['F', 'M', 'M', 'M', 'F', 'M', 'M', 'F'],
'grade': [85, 90, 75, 80, 95, 88, 92, 87],
'subject': ['Math', 'Math', 'Math', 'Math', 'English', 'English', 'English', 'English']}
df = pd.DataFrame(data)
# 使用pivot将subject作为列,按照name和gender进行分组,并计算每个分组的平均grade
df_pivot = df.pivot(index=['name', 'gender'], columns='subject', values='grade').reset_index()
print(df_pivot)
# 使用melt将Math和English列进行合并,并生成新的subject列
df_melt = pd.melt(df, id_vars=['name', 'age', 'gender'], value_vars=['Math', 'English'], var_name='subject', value_name='grade')
print(df_melt)
输出:
subject name gender English Math
0 Alice F 95.0 85.0
1 Bob M 88.0 90.0
2 Charlie M NaN 75.0
3 David M NaN 80.0
4 Emily F 87.0 NaN
5 Fred M NaN NaN
6 George M NaN 92.0
7 Helen F 87.0 NaN
name age gender subject grade
0 Alice 25 F Math 85
1 Bob 32 M Math 90
2 Charlie 18 M Math 75
3 David 47 M Math 80
4 Emily 19 F Math 95
5 Fred 27 M Math 88
6 George 41 M Math 92
7 Helen 35 F Math 87
8 Alice 25 F English 95
9 Bob 32 M English 88
10 Charlie 18 M English NaN
11 David 47 M English NaN
12 Emily 19 F English 87
13 Fred 27 M English NaN
14 George 41 M English 87
15 Helen 35 F English NaN
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python Pandas基础操作详解 - Python技术站