import pandas as pd
df=pd.read_excel("./test.xlsx")
df.head()
|
product |
计数项:单位 |
求和项:原价 |
求和项:金额 |
计数项:数量 |
求和项:团购价 |
0 |
福临门家宴小麦粉 |
1 |
29.9 |
54.0 |
1 |
27.0 |
1 |
福临门老家土榨菜籽油 |
3 |
409.7 |
340.7 |
3 |
340.7 |
2 |
福临门麦芯粉面粉 |
4 |
159.6 |
222.0 |
4 |
148.0 |
3 |
福临门自然香稻花香 |
4 |
319.6 |
425.4 |
4 |
283.6 |
4 |
金龙鱼小榨菜籽油 |
2 |
219.8 |
210.0 |
2 |
210.0 |
可以指定值展示多少行
df.head(3)
|
product |
计数项:单位 |
求和项:原价 |
求和项:金额 |
计数项:数量 |
求和项:团购价 |
0 |
福临门家宴小麦粉 |
1 |
29.9 |
54.0 |
1 |
27.0 |
1 |
福临门老家土榨菜籽油 |
3 |
409.7 |
340.7 |
3 |
340.7 |
2 |
福临门麦芯粉面粉 |
4 |
159.6 |
222.0 |
4 |
148.0 |
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 12 entries, 0 to 11
Data columns (total 6 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 product 12 non-null object
1 计数项:单位 12 non-null int64
2 求和项:原价 12 non-null float64
3 求和项:金额 12 non-null float64
4 计数项:数量 12 non-null int64
5 求和项:团购价 12 non-null float64
dtypes: float64(3), int64(2), object(1)
memory usage: 704.0+ bytes
df.index
RangeIndex(start=0, stop=12, step=1)
df.columns
Index(['product', '计数项:单位', '求和项:原价', '求和项:金额', '计数项:数量', '求和项:团购价'], dtype='object')
df.values
array([['福临门家宴小麦粉', 1, 29.9, 54.0, 1, 27.0],
['福临门老家土榨菜籽油', 3, 409.70000000000005, 340.70000000000005, 3,
340.70000000000005],
['福临门麦芯粉面粉', 4, 159.6, 222.0, 4, 148.0],
['福临门自然香稻花香', 4, 319.6, 425.40000000000003, 4, 283.6],
['金龙鱼小榨菜籽油', 2, 219.8, 210.0, 2, 210.0],
['金苑精制粉', 1, 38.0, 66.0, 1, 33.0],
['龙大铁桶原浆花生油', 1, 185.2, 152.0, 1, 152.0],
['鲁花低芥酸菜籽油', 2, 239.8, 198.0, 2, 198.0],
['鲁花花生油', 1, 165.9, 157.0, 1, 157.0],
['荣平干菜', 6, 716.5, 632.5, 6, 632.5],
['五丰小产地长粒香', 2, 119.8, 165.0, 2, 110.0],
['总计', 32, 2603.8, 5245.200000000001, 32, 2291.8]], dtype=object)
可以自己创建一个dataframe的值
data={'country':['aaa','bbb','ccc'],
'money':[11,22,33]}
df_data=pd.DataFrame(data)
df_data
|
country |
money |
0 |
aaa |
11 |
1 |
bbb |
22 |
2 |
ccc |
33 |
df.info
<bound method DataFrame.info of product 计数项:单位 求和项:原价 求和项:金额 计数项:数量 求和项:团购价
0 福临门家宴小麦粉 1 29.9 54.0 1 27.0
1 福临门老家土榨菜籽油 3 409.7 340.7 3 340.7
2 福临门麦芯粉面粉 4 159.6 222.0 4 148.0
3 福临门自然香稻花香 4 319.6 425.4 4 283.6
4 金龙鱼小榨菜籽油 2 219.8 210.0 2 210.0
5 金苑精制粉 1 38.0 66.0 1 33.0
6 龙大铁桶原浆花生油 1 185.2 152.0 1 152.0
7 鲁花低芥酸菜籽油 2 239.8 198.0 2 198.0
8 鲁花花生油 1 165.9 157.0 1 157.0
9 荣平干菜 6 716.5 632.5 6 632.5
10 五丰小产地长粒香 2 119.8 165.0 2 110.0
11 总计 32 2603.8 5245.2 32 2291.8>
## 取指定的数据
a=df['product']
print(type(a))
a[:2]
<class 'pandas.core.series.Series'>
0 福临门家宴小麦粉
1 福临门老家土榨菜籽油
Name: product, dtype: object
## series是dataframe中的一部分的意思
a.index
RangeIndex(start=0, stop=12, step=1)
a.values[:5]
array(['福临门家宴小麦粉', '福临门老家土榨菜籽油', '福临门麦芯粉面粉', '福临门自然香稻花香', '金龙鱼小榨菜籽油'],
dtype=object)
df.head()
|
product |
求和项:原价 |
求和项:金额 |
计数项:数量 |
求和项:团购价 |
计数项:单位 |
|
|
|
|
|
1 |
福临门家宴小麦粉 |
29.9 |
54.0 |
1 |
27.0 |
3 |
福临门老家土榨菜籽油 |
409.7 |
340.7 |
3 |
340.7 |
4 |
福临门麦芯粉面粉 |
159.6 |
222.0 |
4 |
148.0 |
4 |
福临门自然香稻花香 |
319.6 |
425.4 |
4 |
283.6 |
2 |
金龙鱼小榨菜籽油 |
219.8 |
210.0 |
2 |
210.0 |
## 可以设置索引的列
df=df.set_index('product')#注意:这里使用的是他返回的一张表
df.head()
|
求和项:原价 |
求和项:金额 |
计数项:数量 |
求和项:团购价 |
product |
|
|
|
|
福临门家宴小麦粉 |
29.9 |
54.0 |
1 |
27.0 |
福临门老家土榨菜籽油 |
409.7 |
340.7 |
3 |
340.7 |
福临门麦芯粉面粉 |
159.6 |
222.0 |
4 |
148.0 |
福临门自然香稻花香 |
319.6 |
425.4 |
4 |
283.6 |
金龙鱼小榨菜籽油 |
219.8 |
210.0 |
2 |
210.0 |
df['计数项:数量'][:4]
product
福临门家宴小麦粉 1
福临门老家土榨菜籽油 3
福临门麦芯粉面粉 4
福临门自然香稻花香 4
Name: 计数项:数量, dtype: int64
### 这样每个每个所对应的名字再是不好看的列数了
count=df['计数项:数量']
count
product
福临门家宴小麦粉 1
福临门老家土榨菜籽油 3
福临门麦芯粉面粉 4
福临门自然香稻花香 4
金龙鱼小榨菜籽油 2
金苑精制粉 1
龙大铁桶原浆花生油 1
鲁花低芥酸菜籽油 2
鲁花花生油 1
荣平干菜 6
五丰小产地长粒香 2
总计 32
Name: 计数项:数量, dtype: int64
count['福临门麦芯粉面粉']
4
count=count+10
count[:]#
product
福临门家宴小麦粉 11
福临门老家土榨菜籽油 13
福临门麦芯粉面粉 14
福临门自然香稻花香 14
金龙鱼小榨菜籽油 12
金苑精制粉 11
龙大铁桶原浆花生油 11
鲁花低芥酸菜籽油 12
鲁花花生油 11
荣平干菜 16
五丰小产地长粒香 12
总计 42
Name: 计数项:数量, dtype: int64
count=count*count
count
product
福临门家宴小麦粉 121
福临门老家土榨菜籽油 169
福临门麦芯粉面粉 196
福临门自然香稻花香 196
金龙鱼小榨菜籽油 144
金苑精制粉 121
龙大铁桶原浆花生油 121
鲁花低芥酸菜籽油 144
鲁花花生油 121
荣平干菜 256
五丰小产地长粒香 144
总计 1764
Name: 计数项:数量, dtype: int64
## numpy 一样的计算能力
count.max()
1764
count.mean()
291.4166666666667
count.min()
121
.descirbe()可以得到基本的统计特性
df.describe()
|
求和项:原价 |
求和项:金额 |
计数项:数量 |
求和项:团购价 |
count |
12.000000 |
12.000000 |
12.000000 |
12.000000 |
mean |
433.966667 |
655.650000 |
4.916667 |
381.966667 |
std |
707.943261 |
1454.320706 |
8.670308 |
622.677906 |
min |
29.900000 |
54.000000 |
1.000000 |
27.000000 |
25% |
149.650000 |
155.750000 |
1.000000 |
138.500000 |
50% |
202.500000 |
204.000000 |
2.000000 |
177.500000 |
75% |
342.125000 |
361.875000 |
4.000000 |
297.875000 |
max |
2603.800000 |
5245.200000 |
32.000000 |
2291.800000 |
Pandas 索引结构
定位一个列
df['计数项:数量']
product
福临门家宴小麦粉 1
福临门老家土榨菜籽油 3
福临门麦芯粉面粉 4
福临门自然香稻花香 4
金龙鱼小榨菜籽油 2
金苑精制粉 1
龙大铁桶原浆花生油 1
鲁花低芥酸菜籽油 2
鲁花花生油 1
荣平干菜 6
五丰小产地长粒香 2
总计 32
Name: 计数项:数量, dtype: int64
定位两个列
df[['求和项:金额','计数项:数量']]#这里有两层
|
求和项:金额 |
计数项:数量 |
product |
|
|
福临门家宴小麦粉 |
54.0 |
1 |
福临门老家土榨菜籽油 |
340.7 |
3 |
福临门麦芯粉面粉 |
222.0 |
4 |
福临门自然香稻花香 |
425.4 |
4 |
金龙鱼小榨菜籽油 |
210.0 |
2 |
金苑精制粉 |
66.0 |
1 |
龙大铁桶原浆花生油 |
152.0 |
1 |
鲁花低芥酸菜籽油 |
198.0 |
2 |
鲁花花生油 |
157.0 |
1 |
荣平干菜 |
632.5 |
6 |
五丰小产地长粒香 |
165.0 |
2 |
总计 |
5245.2 |
32 |
指定索引
- loc 指定lable索引
- iloc 指定position索引
df[0]#不允许这样索引
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
File e:\anaconda\lib\site-packages\pandas\core\indexes\base.py:3621, in Index.get_loc(self, key, method, tolerance)
3620 try:
-> 3621 return self._engine.get_loc(casted_key)
3622 except KeyError as err:
File e:\anaconda\lib\site-packages\pandas\_libs\index.pyx:136, in pandas._libs.index.IndexEngine.get_loc()
File e:\anaconda\lib\site-packages\pandas\_libs\index.pyx:163, in pandas._libs.index.IndexEngine.get_loc()
File pandas\_libs\hashtable_class_helper.pxi:5198, in pandas._libs.hashtable.PyObjectHashTable.get_item()
File pandas\_libs\hashtable_class_helper.pxi:5206, in pandas._libs.hashtable.PyObjectHashTable.get_item()
KeyError: 0
The above exception was the direct cause of the following exception:
KeyError Traceback (most recent call last)
f:\文档\panda汇总.ipynb 单元格 38 in <cell line: 1>()
----> <a href='vscode-notebook-cell:/f%3A/%E6%96%87%E6%A1%A3/panda%E6%B1%87%E6%80%BB.ipynb#X61sZmlsZQ%3D%3D?line=0'>1</a> df[0]
File e:\anaconda\lib\site-packages\pandas\core\frame.py:3505, in DataFrame.__getitem__(self, key)
3503 if self.columns.nlevels > 1:
3504 return self._getitem_multilevel(key)
-> 3505 indexer = self.columns.get_loc(key)
3506 if is_integer(indexer):
3507 indexer = [indexer]
File e:\anaconda\lib\site-packages\pandas\core\indexes\base.py:3623, in Index.get_loc(self, key, method, tolerance)
3621 return self._engine.get_loc(casted_key)
3622 except KeyError as err:
-> 3623 raise KeyError(key) from err
3624 except TypeError:
3625 # If we have a listlike key, _check_indexing_error will raise
3626 # InvalidIndexError. Otherwise we fall through and re-raise
3627 # the TypeError.
3628 self._check_indexing_error(key)
KeyError: 0
df.iloc[0]
求和项:原价 29.9
求和项:金额 54.0
计数项:数量 1.0
求和项:团购价 27.0
Name: 福临门家宴小麦粉, dtype: float64
df.iloc[0:5]
|
求和项:原价 |
求和项:金额 |
计数项:数量 |
求和项:团购价 |
product |
|
|
|
|
福临门家宴小麦粉 |
29.9 |
54.0 |
1 |
27.0 |
福临门老家土榨菜籽油 |
409.7 |
340.7 |
3 |
340.7 |
福临门麦芯粉面粉 |
159.6 |
222.0 |
4 |
148.0 |
福临门自然香稻花香 |
319.6 |
425.4 |
4 |
283.6 |
金龙鱼小榨菜籽油 |
219.8 |
210.0 |
2 |
210.0 |
df.iloc[0:5][0:2]
|
求和项:原价 |
求和项:金额 |
计数项:数量 |
求和项:团购价 |
product |
|
|
|
|
福临门家宴小麦粉 |
29.9 |
54.0 |
1 |
27.0 |
福临门老家土榨菜籽油 |
409.7 |
340.7 |
3 |
340.7 |
df.loc['福临门老家土榨菜籽油']
求和项:原价 409.7
求和项:金额 340.7
计数项:数量 3.0
求和项:团购价 340.7
Name: 福临门老家土榨菜籽油, dtype: float64
df.loc['福临门老家土榨菜籽油','求和项:原价']
409.70000000000005
df.loc['福临门老家土榨菜籽油':'金龙鱼小榨菜籽油',:]
|
求和项:原价 |
求和项:金额 |
计数项:数量 |
求和项:团购价 |
product |
|
|
|
|
福临门老家土榨菜籽油 |
409.7 |
340.7 |
3 |
340.7 |
福临门麦芯粉面粉 |
159.6 |
222.0 |
4 |
148.0 |
福临门自然香稻花香 |
319.6 |
425.4 |
4 |
283.6 |
金龙鱼小榨菜籽油 |
219.8 |
210.0 |
2 |
210.0 |
df.loc['福临门老家土榨菜籽油','求和项:原价']=99999
df.head()
|
求和项:原价 |
求和项:金额 |
计数项:数量 |
求和项:团购价 |
product |
|
|
|
|
福临门家宴小麦粉 |
29.9 |
54.0 |
1 |
27.0 |
福临门老家土榨菜籽油 |
99999.0 |
340.7 |
3 |
340.7 |
福临门麦芯粉面粉 |
159.6 |
222.0 |
4 |
148.0 |
福临门自然香稻花香 |
319.6 |
425.4 |
4 |
283.6 |
金龙鱼小榨菜籽油 |
219.8 |
210.0 |
2 |
210.0 |
bool类型索引
df['求和项:原价']>199
product
福临门家宴小麦粉 False
福临门老家土榨菜籽油 True
福临门麦芯粉面粉 False
福临门自然香稻花香 True
金龙鱼小榨菜籽油 True
金苑精制粉 False
龙大铁桶原浆花生油 False
鲁花低芥酸菜籽油 True
鲁花花生油 False
荣平干菜 True
五丰小产地长粒香 False
总计 True
Name: 求和项:原价, dtype: bool
## 然后再用这个bool进行索引
df[df['求和项:原价']>199]
|
求和项:原价 |
求和项:金额 |
计数项:数量 |
求和项:团购价 |
product |
|
|
|
|
福临门老家土榨菜籽油 |
99999.0 |
340.7 |
3 |
340.7 |
福临门自然香稻花香 |
319.6 |
425.4 |
4 |
283.6 |
金龙鱼小榨菜籽油 |
219.8 |
210.0 |
2 |
210.0 |
鲁花低芥酸菜籽油 |
239.8 |
198.0 |
2 |
198.0 |
荣平干菜 |
716.5 |
632.5 |
6 |
632.5 |
总计 |
2603.8 |
5245.2 |
32 |
2291.8 |
df.loc['福临门自然香稻花香','求和项:原价']#loc前面行的范围,后面是列的范围
319.6
df.loc[df['求和项:原价']>100,'求和项:团购价']#在原价大于100的数据里看团购价的值
product
福临门老家土榨菜籽油 340.7
福临门麦芯粉面粉 148.0
福临门自然香稻花香 283.6
金龙鱼小榨菜籽油 210.0
龙大铁桶原浆花生油 152.0
鲁花低芥酸菜籽油 198.0
鲁花花生油 157.0
荣平干菜 632.5
五丰小产地长粒香 110.0
总计 2291.8
Name: 求和项:团购价, dtype: float64
#然后求一下,团购价最高的产品的价钱
df.loc[df['求和项:原价']>100,'求和项:团购价'].max()
2291.8
group by语句
import pandas as pd
df=pd.read_excel('./test.xlsx')
test=pd.DataFrame({'name':['A','X','W','B','B','A','W','X','C','A','B'],
'num':[1,3,4,5,6,3,1,3,4,1,2]})
test.head(10)
|
name |
num |
0 |
A |
1 |
1 |
X |
3 |
2 |
W |
4 |
3 |
B |
5 |
4 |
B |
6 |
5 |
A |
3 |
6 |
W |
1 |
7 |
X |
3 |
8 |
C |
4 |
9 |
A |
1 |
for i in test['name']:
print(i,test[test['name']==i].sum())
A name AAA
num 5
dtype: object
X name XX
num 6
dtype: object
W name WW
num 5
dtype: object
B name BBB
num 13
dtype: object
B name BBB
num 13
dtype: object
A name AAA
num 5
dtype: object
W name WW
num 5
dtype: object
X name XX
num 6
dtype: object
C name C
num 4
dtype: object
A name AAA
num 5
dtype: object
B name BBB
num 13
dtype: object
可以看到这样索引比较麻烦,我们使用group by
test.groupby('name').sum()
|
num |
name |
|
A |
5 |
B |
13 |
C |
4 |
W |
5 |
X |
6 |
import numpy as np
test.groupby('name').aggregate(np.mean)
|
num |
name |
|
A |
1.666667 |
B |
4.333333 |
C |
4.000000 |
W |
2.500000 |
X |
3.000000 |
df.groupby('product')['求和项:团购价'].max()
product
五丰小产地长粒香 110.0
总计 2291.8
福临门家宴小麦粉 27.0
福临门老家土榨菜籽油 340.7
福临门自然香稻花香 283.6
福临门麦芯粉面粉 148.0
荣平干菜 632.5
金苑精制粉 33.0
金龙鱼小榨菜籽油 210.0
鲁花低芥酸菜籽油 198.0
鲁花花生油 157.0
龙大铁桶原浆花生油 152.0
Name: 求和项:团购价, dtype: float64