python第三章 04 Pandas的常用操作

DataFrame 的常用操作一

  1. 转置
  2. 更改类型
  3. 排序
  4. 值替换
import pandas as pd
data = {'性别':['男','女','女','男','男'],
        '姓名':['小明','小红','小芳','大黑','张三'],
        '身高':[178,173,165,188,156],
        '年龄':[20,20,25,24,29]}

df = pd.DataFrame(data)
df
性别姓名身高年龄
0小明17820
1小红17320
2小芳16525
3大黑18824
4张三15629
df.columns
Index(['性别', '姓名', '身高', '年龄'], dtype='object')

修改列索引

直接修改列索引 df.columns[]

df.columns=[‘name’,‘age’,‘sex’,‘height’]

# 修改列索引
df.columns=['name','age','sex','height']
df
nameagesexheight
0小明17820
1小红17320
2小芳16525
3大黑18824
4张三15629
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
nameagesexheight
0小明17820
1小红17320
2小芳16525
3大黑18824
4张三15629
#?df.replace

替换一个值 df.replace()

df.replace({‘name’:{‘小明’:‘xiaoming’}},inplace=True)

# 替换一个值
df.replace({'name':{'小明':'xiaoming'}},inplace=True)
df
nameagesexheight
0小明17820
1小红17320
2小芳16525
3大黑18824
4张三15629

查看一列有多少不同数值 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')
nameagesexheight
3大黑18824
0小明17820
1小红17320
2小芳16525
4张三15629
?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])
nameagesexheight
3大黑18824
0小明17820
1小红17320
2小芳16525
4张三15629

求极值 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 的常用操作二

  1. 累加求和
  2. 增加、删除
  3. 修改增加值
  4. 值替换
df
nameagesexheight
0xiaoming20178
1小红20173
2小芳25165
3大黑24188
4张三29156

累加求和 df.cumsum()

# 累加求和
df.cumsum(0)
nameagesexheight
0xiaoming20178
1xiaoming小红40男女351
2xiaoming小红小芳65男女女516
3xiaoming小红小芳大黑89男女女男704
4xiaoming小红小芳大黑张三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
nameagesexheightplayer
0xiaoming201781
1小红201731
2小芳251651
3大黑241881
4张三291561
# 删除一列
del df['player']
df
nameagesexheight
0xiaoming20178
1小红20173
2小芳25165
3大黑24188
4张三29156

删除指定行

# 删除行,labels 是行列的名字,默认axis=0删除行,为1则删除列
df.drop(labels=0)
nameagesexheight
1小红20173
2小芳25165
3大黑24188
4张三29156

列值的替换:map函数 df[‘列名’].map({:})

# 修改一列的值,使用 map 函数
df.sex = df['sex'].map({'男':'female','女':'male'})
df
nameagesexheight
0xiaoming20female178
1小红20male173
2小芳25male165
3大黑24female188
4张三29female156

列值的替换: replace函数 df.列名.replace(‘原来’,‘现在’)

# 还可以使用 replace 函数进行替换
df.sex.replace('female','男',inplace=True)
df.sex.replace('male','女',inplace=True)
df
nameagesexheight
0xiaoming20178
1小红20173
2小芳25165
3大黑24188
4张三29156

DataFrame 的常用操作三

  1. 最值得索引位置
  2. 矩阵的运算

每一列最大值的索引位置 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
abcdefghij
00.5106730.8010340.5271480.2786970.8886280.4933870.6814290.5384220.4223150.834816
10.7537410.2579480.7716910.6870270.2098010.2890570.2546120.3237950.7484120.985537
20.6233590.2909800.1638630.4197100.9558780.4765540.5981980.0219250.7487610.770250
30.8812610.4544440.9965990.6076070.5235660.3040190.8619380.2071250.3320110.644591
40.8665980.5429330.8025520.2605410.3608550.8871060.2463450.4699540.7267910.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
abcdefghij
00.7414890.7389230.9421930.8685300.8536450.5559880.3372460.6820370.8307980.707308
10.9579230.0213380.4127410.3149990.4618960.4273330.4744400.1032520.3287870.128442
20.0908380.6172760.1655760.9509870.3544910.4365830.3987490.3871640.9126030.919040
30.1082630.1012640.3511870.7131950.3178840.4078360.1160630.1687650.5879760.364524
40.0088180.0869890.7576810.3425800.1823390.5933270.4301770.7691850.7931290.311288
df2
abcdefghij
00.6595570.3238590.4896860.8333510.5724240.5367820.6803400.8389820.7572690.101105
10.8257930.3089940.0150660.7040650.6774990.3081820.4388490.3645530.9179370.803484
20.5691620.2189210.6275890.4213010.7484510.7230790.2586240.2627640.4696510.367130
30.0318050.3448720.4158050.3394010.6417080.9274550.2421180.7563520.4354480.721508
40.6494320.3937230.8610580.3143640.7051850.2779870.9408080.7047090.3796490.861870
df1-10
abcdefghij
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
abcdefghij
07.4148897.3892319.4219318.6853008.5364495.5598763.3724596.8203718.3079767.073081
19.5792260.2133804.1274133.1499884.6189624.2733354.7443981.0325233.2878711.284418
20.9083836.1727651.6557619.5098663.5449104.3658283.9874903.8716379.1260299.190402
31.0826311.0126373.5118707.1319483.1788414.0783571.1606281.6876505.8797623.645236
40.0881810.8698947.5768073.4257961.8233935.9332684.3017677.6918507.9312873.112877

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值