DataFrame 的常用操作一
- 转置
- 更改类型
- 排序
- 值替换
import pandas as pd
data = {'性别':['男','女','女','男','男'],
'姓名':['小明','小红','小芳','大黑','张三'],
'身高':[178,173,165,188,156],
'年龄':[20,20,25,24,29]}
df = pd.DataFrame(data)
df
性别 | 姓名 | 身高 | 年龄 | |
---|---|---|---|---|
0 | 男 | 小明 | 178 | 20 |
1 | 女 | 小红 | 173 | 20 |
2 | 女 | 小芳 | 165 | 25 |
3 | 男 | 大黑 | 188 | 24 |
4 | 男 | 张三 | 156 | 29 |
df.columns
Index(['性别', '姓名', '身高', '年龄'], dtype='object')
修改列索引
直接修改列索引 df.columns[]
df.columns=[‘name’,‘age’,‘sex’,‘height’]
# 修改列索引
df.columns=['name','age','sex','height']
df
name | age | sex | height | |
---|---|---|---|---|
0 | 男 | 小明 | 178 | 20 |
1 | 女 | 小红 | 173 | 20 |
2 | 女 | 小芳 | 165 | 25 |
3 | 男 | 大黑 | 188 | 24 |
4 | 男 | 张三 | 156 | 29 |
df.age
0 小明
1 小红
2 小芳
3 大黑
4 张三
Name: age, dtype: object
#?df.rename
修改列索引名字 df.rename ()
df.rename(columns={},inplace=True)
# 使用 rename 函数进行修改列索引
df.rename(columns={'姓名':'name', '年龄':'age', '性别':'sex','身高':'height'},inplace=True)
df
name | age | sex | height | |
---|---|---|---|---|
0 | 男 | 小明 | 178 | 20 |
1 | 女 | 小红 | 173 | 20 |
2 | 女 | 小芳 | 165 | 25 |
3 | 男 | 大黑 | 188 | 24 |
4 | 男 | 张三 | 156 | 29 |
#?df.replace
替换一个值 df.replace()
df.replace({‘name’:{‘小明’:‘xiaoming’}},inplace=True)
# 替换一个值
df.replace({'name':{'小明':'xiaoming'}},inplace=True)
df
name | age | sex | height | |
---|---|---|---|---|
0 | 男 | 小明 | 178 | 20 |
1 | 女 | 小红 | 173 | 20 |
2 | 女 | 小芳 | 165 | 25 |
3 | 男 | 大黑 | 188 | 24 |
4 | 男 | 张三 | 156 | 29 |
查看一列有多少不同数值 df.age.unique()
df.age.unique()
# 查看一列有多少种值
df.age.unique()
array(['小明', '小红', '小芳', '大黑', '张三'], dtype=object)
df.age.value_counts()
张三 1
大黑 1
小明 1
小红 1
小芳 1
Name: age, dtype: int64
对数据进行排序 df.sort_values()
df.sort_values(‘age’)
ascending=True 是升序
# 对数据进行排序
df.sort_values('age')
name | age | sex | height | |
---|---|---|---|---|
3 | 男 | 大黑 | 188 | 24 |
0 | 男 | 小明 | 178 | 20 |
1 | 女 | 小红 | 173 | 20 |
2 | 女 | 小芳 | 165 | 25 |
4 | 男 | 张三 | 156 | 29 |
?df.sort_values
[1;31mSignature:[0m
[0mdf[0m[1;33m.[0m[0msort_values[0m[1;33m([0m[1;33m
[0m [0mby[0m[1;33m,[0m[1;33m
[0m [0maxis[0m[1;33m=[0m[1;36m0[0m[1;33m,[0m[1;33m
[0m [0mascending[0m[1;33m=[0m[1;32mTrue[0m[1;33m,[0m[1;33m
[0m [0minplace[0m[1;33m=[0m[1;32mFalse[0m[1;33m,[0m[1;33m
[0m [0mkind[0m[1;33m=[0m[1;34m'quicksort'[0m[1;33m,[0m[1;33m
[0m [0mna_position[0m[1;33m=[0m[1;34m'last'[0m[1;33m,[0m[1;33m
[0m [0mignore_index[0m[1;33m=[0m[1;32mFalse[0m[1;33m,[0m[1;33m
[0m[1;33m)[0m[1;33m[0m[1;33m[0m[0m
[1;31mDocstring:[0m
Sort by the values along either axis.
Parameters
----------
by : str or list of str
Name or list of names to sort by.
- if `axis` is 0 or `'index'` then `by` may contain index
levels and/or column labels.
- if `axis` is 1 or `'columns'` then `by` may contain column
levels and/or index labels.
.. versionchanged:: 0.23.0
Allow specifying index or column level names.
axis : {0 or 'index', 1 or 'columns'}, default 0
Axis to be sorted.
ascending : bool or list of bool, default True
Sort ascending vs. descending. Specify list for multiple sort
orders. If this is a list of bools, must match the length of
the by.
inplace : bool, default False
If True, perform operation in-place.
kind : {'quicksort', 'mergesort', 'heapsort'}, default 'quicksort'
Choice of sorting algorithm. See also ndarray.np.sort for more
information. `mergesort` is the only stable algorithm. For
DataFrames, this option is only applied when sorting on a single
column or label.
na_position : {'first', 'last'}, default 'last'
Puts NaNs at the beginning if `first`; `last` puts NaNs at the
end.
ignore_index : bool, default False
If True, the resulting axis will be labeled 0, 1, …, n - 1.
.. versionadded:: 1.0.0
Returns
-------
sorted_obj : DataFrame or None
DataFrame with sorted values if inplace=False, None otherwise.
Examples
--------
>>> df = pd.DataFrame({
... 'col1': ['A', 'A', 'B', np.nan, 'D', 'C'],
... 'col2': [2, 1, 9, 8, 7, 4],
... 'col3': [0, 1, 9, 4, 2, 3],
... })
>>> df
col1 col2 col3
0 A 2 0
1 A 1 1
2 B 9 9
3 NaN 8 4
4 D 7 2
5 C 4 3
Sort by col1
>>> df.sort_values(by=['col1'])
col1 col2 col3
0 A 2 0
1 A 1 1
2 B 9 9
5 C 4 3
4 D 7 2
3 NaN 8 4
Sort by multiple columns
>>> df.sort_values(by=['col1', 'col2'])
col1 col2 col3
1 A 1 1
0 A 2 0
2 B 9 9
5 C 4 3
4 D 7 2
3 NaN 8 4
Sort Descending
>>> df.sort_values(by='col1', ascending=False)
col1 col2 col3
4 D 7 2
5 C 4 3
2 B 9 9
0 A 2 0
1 A 1 1
3 NaN 8 4
Putting NAs first
>>> df.sort_values(by='col1', ascending=False, na_position='first')
col1 col2 col3
3 NaN 8 4
4 D 7 2
5 C 4 3
2 B 9 9
0 A 2 0
1 A 1 1
[1;31mFile:[0m d:\programdata\anaconda3\lib\site-packages\pandas\core\frame.py
[1;31mType:[0m method
df.sort_values(['age','height'],ascending=[True,False])
name | age | sex | height | |
---|---|---|---|---|
3 | 男 | 大黑 | 188 | 24 |
0 | 男 | 小明 | 178 | 20 |
1 | 女 | 小红 | 173 | 20 |
2 | 女 | 小芳 | 165 | 25 |
4 | 男 | 张三 | 156 | 29 |
求极值 max() min() sum()
# 求极值, axis =0 表示列的最大值,axis =1 其实没什么用,因为如果有身高和年龄,那肯定每一行都是身高最大了
df.max()
name 男
age 张三
sex 188
height 29
dtype: object
df.min()
name 女
age 大黑
sex 156
height 20
dtype: object
df.sum()
name 男女女男男
age 小明小红小芳大黑张三
sex 860
height 118
dtype: object
DataFrame 的常用操作二
- 累加求和
- 增加、删除
- 修改增加值
- 值替换
df
name | age | sex | height | |
---|---|---|---|---|
0 | xiaoming | 20 | 男 | 178 |
1 | 小红 | 20 | 女 | 173 |
2 | 小芳 | 25 | 女 | 165 |
3 | 大黑 | 24 | 男 | 188 |
4 | 张三 | 29 | 男 | 156 |
累加求和 df.cumsum()
# 累加求和
df.cumsum(0)
name | age | sex | height | |
---|---|---|---|---|
0 | xiaoming | 20 | 男 | 178 |
1 | xiaoming小红 | 40 | 男女 | 351 |
2 | xiaoming小红小芳 | 65 | 男女女 | 516 |
3 | xiaoming小红小芳大黑 | 89 | 男女女男 | 704 |
4 | xiaoming小红小芳大黑张三 | 118 | 男女女男男 | 860 |
df.cumsum()函数解释
https://blog.csdn.net/qq_22238533/article/details/72900634
具体代码:(假设数据集为data)
由于是针对每个userID,所以是需要将userID划分一下(这个方法在组内排序的时候有提到,可以参考前面的文章)。
所以才有下面这一句
groupby([‘userID’])
然后,分完组后需要统计的Times,所以就是下面这一句
data[‘Times’].groupby([‘userID’])
最后,我们需要的是累加量,所以,用cumsum()这个函数。
data[‘sum_Times’]=data[‘Times’].groupby([‘userID’]).cumsum()
增加和删除
# 增加一列
df['player'] = 1
df
name | age | sex | height | player | |
---|---|---|---|---|---|
0 | xiaoming | 20 | 男 | 178 | 1 |
1 | 小红 | 20 | 女 | 173 | 1 |
2 | 小芳 | 25 | 女 | 165 | 1 |
3 | 大黑 | 24 | 男 | 188 | 1 |
4 | 张三 | 29 | 男 | 156 | 1 |
# 删除一列
del df['player']
df
name | age | sex | height | |
---|---|---|---|---|
0 | xiaoming | 20 | 男 | 178 |
1 | 小红 | 20 | 女 | 173 |
2 | 小芳 | 25 | 女 | 165 |
3 | 大黑 | 24 | 男 | 188 |
4 | 张三 | 29 | 男 | 156 |
删除指定行
# 删除行,labels 是行列的名字,默认axis=0删除行,为1则删除列
df.drop(labels=0)
name | age | sex | height | |
---|---|---|---|---|
1 | 小红 | 20 | 女 | 173 |
2 | 小芳 | 25 | 女 | 165 |
3 | 大黑 | 24 | 男 | 188 |
4 | 张三 | 29 | 男 | 156 |
列值的替换:map函数 df[‘列名’].map({:})
# 修改一列的值,使用 map 函数
df.sex = df['sex'].map({'男':'female','女':'male'})
df
name | age | sex | height | |
---|---|---|---|---|
0 | xiaoming | 20 | female | 178 |
1 | 小红 | 20 | male | 173 |
2 | 小芳 | 25 | male | 165 |
3 | 大黑 | 24 | female | 188 |
4 | 张三 | 29 | female | 156 |
列值的替换: replace函数 df.列名.replace(‘原来’,‘现在’)
# 还可以使用 replace 函数进行替换
df.sex.replace('female','男',inplace=True)
df.sex.replace('male','女',inplace=True)
df
name | age | sex | height | |
---|---|---|---|---|
0 | xiaoming | 20 | 男 | 178 |
1 | 小红 | 20 | 女 | 173 |
2 | 小芳 | 25 | 女 | 165 |
3 | 大黑 | 24 | 男 | 188 |
4 | 张三 | 29 | 男 | 156 |
DataFrame 的常用操作三
- 最值得索引位置
- 矩阵的运算
每一列最大值的索引位置 df.idxmax()
(np.random.random((5,10))#创建5*10的矩阵
columns=list(‘abcdefghij’)#列表
# 最值得索引位置
import numpy as np
df=pd.DataFrame(np.random.random((5,10)),columns=list('abcdefghij'))
df
a | b | c | d | e | f | g | h | i | j | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 0.510673 | 0.801034 | 0.527148 | 0.278697 | 0.888628 | 0.493387 | 0.681429 | 0.538422 | 0.422315 | 0.834816 |
1 | 0.753741 | 0.257948 | 0.771691 | 0.687027 | 0.209801 | 0.289057 | 0.254612 | 0.323795 | 0.748412 | 0.985537 |
2 | 0.623359 | 0.290980 | 0.163863 | 0.419710 | 0.955878 | 0.476554 | 0.598198 | 0.021925 | 0.748761 | 0.770250 |
3 | 0.881261 | 0.454444 | 0.996599 | 0.607607 | 0.523566 | 0.304019 | 0.861938 | 0.207125 | 0.332011 | 0.644591 |
4 | 0.866598 | 0.542933 | 0.802552 | 0.260541 | 0.360855 | 0.887106 | 0.246345 | 0.469954 | 0.726791 | 0.653153 |
df.idxmax()
a 4
b 1
c 1
d 2
e 2
f 3
g 2
h 3
i 2
j 2
dtype: int64
矩阵间的运算
相同维度是对应位置进行运算
# 矩阵间得运算
# a.相同维度得矩阵加减乘除就是对应元素进行操作
df1=pd.DataFrame(np.random.random((5,10)),columns=list('abcdefghij'))
df2=pd.DataFrame(np.random.random((5,10)),columns=list('abcdefghij'))
df1
a | b | c | d | e | f | g | h | i | j | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 0.741489 | 0.738923 | 0.942193 | 0.868530 | 0.853645 | 0.555988 | 0.337246 | 0.682037 | 0.830798 | 0.707308 |
1 | 0.957923 | 0.021338 | 0.412741 | 0.314999 | 0.461896 | 0.427333 | 0.474440 | 0.103252 | 0.328787 | 0.128442 |
2 | 0.090838 | 0.617276 | 0.165576 | 0.950987 | 0.354491 | 0.436583 | 0.398749 | 0.387164 | 0.912603 | 0.919040 |
3 | 0.108263 | 0.101264 | 0.351187 | 0.713195 | 0.317884 | 0.407836 | 0.116063 | 0.168765 | 0.587976 | 0.364524 |
4 | 0.008818 | 0.086989 | 0.757681 | 0.342580 | 0.182339 | 0.593327 | 0.430177 | 0.769185 | 0.793129 | 0.311288 |
df2
a | b | c | d | e | f | g | h | i | j | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 0.659557 | 0.323859 | 0.489686 | 0.833351 | 0.572424 | 0.536782 | 0.680340 | 0.838982 | 0.757269 | 0.101105 |
1 | 0.825793 | 0.308994 | 0.015066 | 0.704065 | 0.677499 | 0.308182 | 0.438849 | 0.364553 | 0.917937 | 0.803484 |
2 | 0.569162 | 0.218921 | 0.627589 | 0.421301 | 0.748451 | 0.723079 | 0.258624 | 0.262764 | 0.469651 | 0.367130 |
3 | 0.031805 | 0.344872 | 0.415805 | 0.339401 | 0.641708 | 0.927455 | 0.242118 | 0.756352 | 0.435448 | 0.721508 |
4 | 0.649432 | 0.393723 | 0.861058 | 0.314364 | 0.705185 | 0.277987 | 0.940808 | 0.704709 | 0.379649 | 0.861870 |
df1-10
a | b | c | d | e | f | g | h | i | j | |
---|---|---|---|---|---|---|---|---|---|---|
0 | -9.258511 | -9.261077 | -9.057807 | -9.131470 | -9.146355 | -9.444012 | -9.662754 | -9.317963 | -9.169202 | -9.292692 |
1 | -9.042077 | -9.978662 | -9.587259 | -9.685001 | -9.538104 | -9.572667 | -9.525560 | -9.896748 | -9.671213 | -9.871558 |
2 | -9.909162 | -9.382724 | -9.834424 | -9.049013 | -9.645509 | -9.563417 | -9.601251 | -9.612836 | -9.087397 | -9.080960 |
3 | -9.891737 | -9.898736 | -9.648813 | -9.286805 | -9.682116 | -9.592164 | -9.883937 | -9.831235 | -9.412024 | -9.635476 |
4 | -9.991182 | -9.913011 | -9.242319 | -9.657420 | -9.817661 | -9.406673 | -9.569823 | -9.230815 | -9.206871 | -9.688712 |
df1*10
a | b | c | d | e | f | g | h | i | j | |
---|---|---|---|---|---|---|---|---|---|---|
0 | 7.414889 | 7.389231 | 9.421931 | 8.685300 | 8.536449 | 5.559876 | 3.372459 | 6.820371 | 8.307976 | 7.073081 |
1 | 9.579226 | 0.213380 | 4.127413 | 3.149988 | 4.618962 | 4.273335 | 4.744398 | 1.032523 | 3.287871 | 1.284418 |
2 | 0.908383 | 6.172765 | 1.655761 | 9.509866 | 3.544910 | 4.365828 | 3.987490 | 3.871637 | 9.126029 | 9.190402 |
3 | 1.082631 | 1.012637 | 3.511870 | 7.131948 | 3.178841 | 4.078357 | 1.160628 | 1.687650 | 5.879762 | 3.645236 |
4 | 0.088181 | 0.869894 | 7.576807 | 3.425796 | 1.823393 | 5.933268 | 4.301767 | 7.691850 | 7.931287 | 3.112877 |