dataframe的创建方式
import pandas as pd
import numpy as np
from tensorflow.python.trackable.trackable_utils import pretty_print_node_path
s1 = pd.Series([1,2,3,4,5])
s2 = pd.Series([6,7,8,9,10])
df = pd.DataFrame({"第一列":s1,"第二列":s2})
print(df)
print(type(df))
print(type(df["第一列"]))
第一列 第二列
0 1 6
1 2 7
2 3 8
3 4 9
4 5 10
<class 'pandas.core.frame.DataFrame'>
<class 'pandas.core.series.Series'>
通过字典来创建
df = pd.DataFrame(
{
"name":["tom","jack","alice","bob","alien"],
"age":[41,2,15,20,25],
"score":[60.5,25.1,89.2,56.1,52.0]
},index=[1,2,3,4,5],columns=["name","score","age"]
)
df
|
name |
score |
age |
| 1 |
tom |
60.5 |
41 |
| 2 |
jack |
25.1 |
2 |
| 3 |
alice |
89.2 |
15 |
| 4 |
bob |
56.1 |
20 |
| 5 |
alien |
52.0 |
25 |
print('行索引:')
print(df.index)
print('列索引:')
print(df.columns)
print('值')
print(df.values)
行索引:
Index([1, 2, 3, 4, 5], dtype='int64')
列索引:
Index(['name', 'score', 'age'], dtype='object')
值
[['tom' 60.5 41]
['jack' 25.1 2]
['alice' 89.2 15]
['bob' 56.1 20]
['alien' 52.0 25]]
print('维度:',df.ndim)
print('性状:',df.shape)
print('元素个数:',df.size)
print('数据类型:')
print(df.dtypes)
维度: 2
性状: (5, 3)
元素个数: 15
数据类型:
name object
score float64
age int64
dtype: object
df
|
name |
score |
age |
| 1 |
tom |
60.5 |
41 |
| 2 |
jack |
25.1 |
2 |
| 3 |
alice |
89.2 |
15 |
| 4 |
bob |
56.1 |
20 |
| 5 |
alien |
52.0 |
25 |
print(df.loc[4])
print(df.iloc[3])
name bob
score 56.1
age 20
Name: 4, dtype: object
name bob
score 56.1
age 20
Name: 4, dtype: object
df
|
name |
score |
age |
| 1 |
tom |
60.5 |
41 |
| 2 |
jack |
25.1 |
2 |
| 3 |
alice |
89.2 |
15 |
| 4 |
bob |
56.1 |
20 |
| 5 |
alien |
52.0 |
25 |
print(df.loc[:,'name'])
print(df.iloc[:, 0])
1 tom
2 jack
3 alice
4 bob
5 alien
Name: name, dtype: object
1 tom
2 jack
3 alice
4 bob
5 alien
Name: name, dtype: object
df
|
name |
score |
age |
| 1 |
tom |
60.5 |
41 |
| 2 |
jack |
25.1 |
2 |
| 3 |
alice |
89.2 |
15 |
| 4 |
bob |
56.1 |
20 |
| 5 |
alien |
52.0 |
25 |
print(df.at[3, 'score'])
print(df.iat[2, 1])
print(df.loc[3, 'score'])
print(df.iloc[2, 1])
89.2
89.2
89.2
89.2
print(df['name'])
print(type(df['name']))
1 tom
2 jack
3 alice
4 bob
5 alien
Name: name, dtype: object
<class 'pandas.core.series.Series'>
print(df.name)
print(type(df.name))
print(df[['name']])
print(type(df[['name']]))
df[['name']]
1 tom
2 jack
3 alice
4 bob
5 alien
Name: name, dtype: object
<class 'pandas.core.series.Series'>
name
1 tom
2 jack
3 alice
4 bob
5 alien
<class 'pandas.core.frame.DataFrame'>
|
name |
| 1 |
tom |
| 2 |
jack |
| 3 |
alice |
| 4 |
bob |
| 5 |
alien |
print(df[['name','score']])
name score
1 tom 60.5
2 jack 25.1
3 alice 89.2
4 bob 56.1
5 alien 52.0
print(df.head(2))
print(df.tail(2))
name score age
1 tom 60.5 41
2 jack 25.1 2
name score age
4 bob 56.1 20
5 alien 52.0 25
df[df.score > 70]
df[(df.score > 70) & (df.age < 20)]
df[(df['score'] > 70) & (df.age < 20)]
|
name |
score |
age |
| 3 |
alice |
89.2 |
15 |
df.sample(3)
|
name |
score |
age |
| 1 |
tom |
60.5 |
41 |
| 3 |
alice |
89.2 |
15 |
| 5 |
alien |
52.0 |
25 |
df = pd.DataFrame(
{
"name":["tom","tom","jack","alice","bob","alien"],
"age":[41,41,2,15,20,25],
"score":[60.5,60.5,25.1,89.2,56.1,52.0]
},index=[1,2,3,4,5,6],columns=["name","score","age"]
)
df
|
name |
score |
age |
| 1 |
tom |
60.5 |
41 |
| 2 |
tom |
60.5 |
41 |
| 3 |
jack |
25.1 |
2 |
| 4 |
alice |
89.2 |
15 |
| 5 |
bob |
56.1 |
20 |
| 6 |
alien |
52.0 |
25 |
print(df.head())
print(df.tail())
name score age
1 tom 60.5 41
2 jack 25.1 2
3 alice 89.2 15
4 bob 56.1 20
5 alien 52.0 25
name score age
1 tom 60.5 41
2 jack 25.1 2
3 alice 89.2 15
4 bob 56.1 20
5 alien 52.0 25
print(df.isin(['jack',20]))
name score age
1 False False False
2 True False False
3 False False False
4 False False True
5 False False False
print(df.isna())
name score age
1 False False False
2 False False False
3 False False False
4 False False False
5 False False False
print(df['score'])
print(df['score'].sum())
1 60.5
2 25.1
3 89.2
4 56.1
5 52.0
Name: score, dtype: float64
282.9
print(df.score.max())
print(df.score.min())
print(df.score.mean())
print(df.score.median())
print(df.score.mode())
print(df.score.std())
print(df.score.var())
89.2
25.1
56.58
56.1
0 25.1
1 52.0
2 56.1
3 60.5
4 89.2
Name: score, dtype: float64
22.867159858626955
522.9069999999999
print(df.score.quantile(0.25))
52.0
print(df.describe())
score age
count 5.00000 5.000000
mean 56.58000 20.600000
std 22.86716 14.258331
min 25.10000 2.000000
25% 52.00000 15.000000
50% 56.10000 20.000000
75% 60.50000 25.000000
max 89.20000 41.000000
print(df.count())
name 5
score 5
age 5
dtype: int64
print(df.value_counts())
name score age
tom 60.5 41 2
alice 89.2 15 1
alien 52.0 25 1
bob 56.1 20 1
jack 25.1 2 1
Name: count, dtype: int64
print(df.drop_duplicates())
name score age
1 tom 60.5 41
3 jack 25.1 2
4 alice 89.2 15
5 bob 56.1 20
6 alien 52.0 25
print(df.duplicated())
print(df.duplicated(subset=['age']))
1 False
2 True
3 False
4 False
5 False
6 False
dtype: bool
1 False
2 True
3 False
4 False
5 False
6 False
dtype: bool
df.sample()
|
name |
score |
age |
| 2 |
tom |
60.5 |
41 |
print(df.replace(41,20))
name score age
1 tom 60.5 20
2 tom 60.5 20
3 jack 25.1 2
4 alice 89.2 15
5 bob 56.1 20
6 alien 52.0 25
df.cumsum()
df.cumsum(axis=0)
|
name |
score |
age |
| 1 |
tom |
60.5 |
41 |
| 2 |
tomtom |
121.0 |
82 |
| 3 |
tomtomjack |
146.1 |
84 |
| 4 |
tomtomjackalice |
235.3 |
99 |
| 5 |
tomtomjackalicebob |
291.4 |
119 |
| 6 |
tomtomjackalicebobalien |
343.4 |
144 |
print(df.sort_index(ascending=False))
name score age
6 alien 52.0 25
5 bob 56.1 20
4 alice 89.2 15
3 jack 25.1 2
2 tom 60.5 41
1 tom 60.5 41
print(df.sort_values(by='name', ascending=False))
name score age
1 tom 60.5 41
2 tom 60.5 41
3 jack 25.1 2
5 bob 56.1 20
6 alien 52.0 25
4 alice 89.2 15
df = pd.DataFrame(
{
"name":["tom","tom","jack","alice","bob","alien"],
"age":[41,41,20,20,20,25],
"score":[60.5,60.5,25.5,89.2,56.1,25.5]
},index=[1,2,3,4,5,6],columns=["name","score","age"]
)
df
|
name |
score |
age |
| 1 |
tom |
60.5 |
41 |
| 2 |
tom |
60.5 |
41 |
| 3 |
jack |
25.5 |
20 |
| 4 |
alice |
89.2 |
20 |
| 5 |
bob |
56.1 |
20 |
| 6 |
alien |
25.5 |
25 |
print(df.sort_values(by=['score','age'] ,ascending=[True,False]))
name score age
6 alien 25.5 25
3 jack 25.5 20
5 bob 56.1 20
1 tom 60.5 41
2 tom 60.5 41
4 alice 89.2 20
print(df.nlargest(2, columns=['score', 'age']))
print(df.nsmallest(2, columns=['score', 'age']))
name score age
4 alice 89.2 20
1 tom 60.5 41
name score age
3 jack 25.5 20
6 alien 25.5 25
'''
案例1:学生成绩分析
场景:某班级的学生成绩数据如下,请完成以下任务:
1. 计算每位学生的总分和平均分。
2. 找出数学成绩高于90分或英语成绩高于85分的学生。
3. 按总分从高到低排序,并输出前3名学生。
'''
import pandas as pd
data = {
'姓名': ['张三', '李四', '王五', '赵六', '钱七'],
'数学': [85, 92, 78, 88, 95],
'英语': [90, 88, 85, 92, 80],
'物理': [75, 80, 88, 85, 90]
}
scores = pd.DataFrame(data)
scores
|
姓名 |
数学 |
英语 |
物理 |
| 0 |
张三 |
85 |
90 |
75 |
| 1 |
李四 |
92 |
88 |
80 |
| 2 |
王五 |
78 |
85 |
88 |
| 3 |
赵六 |
88 |
92 |
85 |
| 4 |
钱七 |
95 |
80 |
90 |
scores[['数学','英语','物理']].sum()
数学 438
英语 435
物理 418
dtype: int64
scores['总分'] = scores[['数学','英语','物理']].sum(axis=1)
scores['平均分'] = scores[['数学','英语','物理']].mean(axis=1)
scores['平均分'] = scores['总分'] / 3
scores
|
姓名 |
数学 |
英语 |
物理 |
总分 |
平均分 |
| 0 |
张三 |
85 |
90 |
75 |
250 |
83.333333 |
| 1 |
李四 |
92 |
88 |
80 |
260 |
86.666667 |
| 2 |
王五 |
78 |
85 |
88 |
251 |
83.666667 |
| 3 |
赵六 |
88 |
92 |
85 |
265 |
88.333333 |
| 4 |
钱七 |
95 |
80 |
90 |
265 |
88.333333 |
scores[(scores['数学'] > 90) | (scores['英语'] > 85)]
|
姓名 |
数学 |
英语 |
物理 |
总分 |
平均分 |
| 0 |
张三 |
85 |
90 |
75 |
250 |
83.333333 |
| 1 |
李四 |
92 |
88 |
80 |
260 |
86.666667 |
| 3 |
赵六 |
88 |
92 |
85 |
265 |
88.333333 |
| 4 |
钱七 |
95 |
80 |
90 |
265 |
88.333333 |
scores.sort_values('总分',ascending=False).head(3)
|
姓名 |
数学 |
英语 |
物理 |
总分 |
平均分 |
| 4 |
钱七 |
95 |
80 |
90 |
265 |
88.333333 |
| 3 |
赵六 |
88 |
92 |
85 |
265 |
88.333333 |
| 1 |
李四 |
92 |
88 |
80 |
260 |
86.666667 |
scores.nlargest(3,columns=['总分'])
|
姓名 |
数学 |
英语 |
物理 |
总分 |
平均分 |
| 3 |
赵六 |
88 |
92 |
85 |
265 |
88.333333 |
| 4 |
钱七 |
95 |
80 |
90 |
265 |
88.333333 |
| 1 |
李四 |
92 |
88 |
80 |
260 |
86.666667 |
'''
案例2:销售数据分析
场景:某公司销售数据如下,请完成以下任务:
1. 计算每种产品的总销售额(销售额 = 单价 × 销量)。
2. 找出销售额最高的产品。
3. 按销售额从高到低排序,并输出所有产品信息。
'''
import pandas as pd
data = {
'产品名称': ['A', 'B', 'C', 'D'],
'单价': [100, 150, 200, 120],
'销量': [50, 30, 20, 40]
}
df = pd.DataFrame(data)
df
|
产品名称 |
单价 |
销量 |
| 0 |
A |
100 |
50 |
| 1 |
B |
150 |
30 |
| 2 |
C |
200 |
20 |
| 3 |
D |
120 |
40 |
df['总销售额'] = df['单价'] * df['销量']
df
|
产品名称 |
单价 |
销量 |
总销售额 |
| 0 |
A |
100 |
50 |
5000 |
| 1 |
B |
150 |
30 |
4500 |
| 2 |
C |
200 |
20 |
4000 |
| 3 |
D |
120 |
40 |
4800 |
df.nlargest(1,columns=['总销售额'])
|
产品名称 |
单价 |
销量 |
总销售额 |
| 0 |
A |
100 |
50 |
5000 |
df.sort_values('总销售额',ascending=False)
|
产品名称 |
单价 |
销量 |
总销售额 |
| 0 |
A |
100 |
50 |
5000 |
| 3 |
D |
120 |
40 |
4800 |
| 1 |
B |
150 |
30 |
4500 |
| 2 |
C |
200 |
20 |
4000 |
'''案例3:电商用户行为分析
场景:某电商平台的用户行为数据如下,请完成以下任务:
'''
import pandas as pd
data = {
'用户ID': [101, 102, 103, 104, 105],
'用户名': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'商品类别': ['电子产品', '服饰', '电子产品', '家居', '服饰'],
'商品单价': [1200, 300, 800, 150, 200],
'购买数量': [1, 3, 2, 5, 4]
}
df = pd.DataFrame(data)
df
|
用户ID |
用户名 |
商品类别 |
商品单价 |
购买数量 |
| 0 |
101 |
Alice |
电子产品 |
1200 |
1 |
| 1 |
102 |
Bob |
服饰 |
300 |
3 |
| 2 |
103 |
Charlie |
电子产品 |
800 |
2 |
| 3 |
104 |
David |
家居 |
150 |
5 |
| 4 |
105 |
Eve |
服饰 |
200 |
4 |
df['总消费金额'] = df['商品单价'] * df['购买数量']
df
|
用户ID |
用户名 |
商品类别 |
商品单价 |
购买数量 |
总消费金额 |
| 0 |
101 |
Alice |
电子产品 |
1200 |
1 |
1200 |
| 1 |
102 |
Bob |
服饰 |
300 |
3 |
900 |
| 2 |
103 |
Charlie |
电子产品 |
800 |
2 |
1600 |
| 3 |
104 |
David |
家居 |
150 |
5 |
750 |
| 4 |
105 |
Eve |
服饰 |
200 |
4 |
800 |
df.nlargest(1,columns='总消费金额')
|
用户ID |
用户名 |
商品类别 |
商品单价 |
购买数量 |
总消费金额 |
| 2 |
103 |
Charlie |
电子产品 |
800 |
2 |
1600 |
df['总消费金额'].mean()
np.float64(1050.0)
df[df['商品类别'] == '电子产品']
|
用户ID |
用户名 |
商品类别 |
商品单价 |
购买数量 |
总消费金额 |
| 0 |
101 |
Alice |
电子产品 |
1200 |
1 |
1200 |
| 2 |
103 |
Charlie |
电子产品 |
800 |
2 |
1600 |
df[df['商品类别'] == '电子产品']['购买数量']
0 1
2 2
Name: 购买数量, dtype: int64
df[df['商品类别'] == '电子产品']['购买数量'].sum()
np.int64(3)
所有评论(0)