Zaoqi's Blog -> Python数据分析教程 -> 图解Pandas ->
数据修改
数据修改¶
在线刷题
检查 or 强化 Pandas
数据分析操作?👉在线体验「Pandas进阶修炼300题」
Note
本页面代码可以在线编辑、执行!
本页数据说明¶
为了更好的介绍相关操作,本页面使用 东京奥运会奖牌数据 数据进行展开,你应该对数据字段、数值、类型等相关信息做一个大致了解!
import pandas as pd
df = pd.read_csv("东京奥运会奖牌数据.csv")
df.head()
排名 | 国家奥委会 | Unnamed: 2 | Unnamed: 3 | Unnamed: 4 | 总分 | 按总数排名 | 国家奥委会代码 | |
---|---|---|---|---|---|---|---|---|
0 | 1 | 美国 | 39 | 41 | 33 | 113 | 1 | USA |
1 | 2 | 中国 | 38 | 32 | 18 | 88 | 2 | CHN |
2 | 3 | 日本 | 27 | 14 | 17 | 58 | 5 | JPN |
3 | 4 | 英国 | 22 | 21 | 22 | 65 | 4 | GBR |
4 | 5 | ROC | 20 | 28 | 23 | 71 | 3 | ROC |
数据修改¶
修改列名¶
将原 df
列名 Unnamed: 2
、Unnamed: 3
、Unnamed: 4
修改为 金牌数
、银牌数
、铜牌数
df.rename(columns={'Unnamed: 2':'金牌数',
'Unnamed: 3':'银牌数',
'Unnamed: 4':'铜牌数'},inplace=True)
替换值(多值)¶
同时替换
将
无
替换为 缺失值将 0 替换为
None
注意:缺失值的 Nan 该怎么生成?
import numpy as np
df.replace(['无',0],[np.nan,'None'],inplace = True)
数据增加¶
新增列(比较值)¶
新增一列 最多奖牌数量 列,值为该过金银牌数量种最多的一个奖牌数量
例如美国银牌最多,则为41,中国为38
df['最多奖牌数量'] = df.bfill(1)[["金牌数", "银牌数",'铜牌数']].max(1)
增加多列¶
新增两列,分别是
金铜牌总数(金牌数+铜牌数)
银铜牌总数(银牌数+铜牌数)
df = df.assign(金铜牌总数=df.金牌数 + df.铜牌数,
银铜牌总数=df.银牌数+df.铜牌数)
新增列(引用变量)¶
新增一列金牌占比,为各国金牌数除以总金牌数(gold_sum)
gold_sum = df['金牌数'].sum()
df.eval(f'金牌占比 = 金牌数 / {gold_sum}',inplace=True)
新增行(末尾追加)¶
在 df 末尾追加一行,内容为 0,1,2,3… 一直到 df
的列长度
df1 = pd.DataFrame([[i for i in range(len(df.columns))]], columns=df.columns)
df_new = df.append(df1)
新增行(指定位置)¶
在第 2 行新增一行数据,即美国和中国之间。
数据内容同上一题
df1 = df.iloc[:1, :]
df2 = df.iloc[1:, :]
df3 = pd.DataFrame([[i for i in range(len(df.columns))]], columns=df.columns)
df_new = pd.concat([df1, df3, df2], ignore_index=True)
数据删除¶
删除指定行¶
删除 df
第一行
df.drop(1)
国家奥委会 | 金牌数 | 银牌数 | 铜牌数 | 总分 | 按总数排名 | 国家奥委会代码 | 比赛地点 | 金银牌总数 | 最多奖牌数量 | 金牌大于30 | 金铜牌总数 | 银铜牌总数 | 金牌占比 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
金牌排名 | ||||||||||||||
2 | 中国 | 38 | 32 | 18 | 88 | 2 | CHN | 东京 | 70 | 38.0 | 是 | 56 | 50 | 0.111765 |
3 | 日本 | 27 | 14 | 17 | 58 | 5 | JPN | 东京 | 41 | 27.0 | 否 | 44 | 31 | 0.079412 |
4 | 英国 | 22 | 21 | 22 | 65 | 4 | GBR | 东京 | 43 | 22.0 | 否 | 44 | 43 | 0.064706 |
5 | 俄奥委会 | 20 | 28 | 23 | 71 | 3 | ROC | 东京 | 48 | 28.0 | 否 | 43 | 51 | 0.058824 |
6 | 澳大利亚 | 17 | 7 | 22 | 46 | 6 | AUS | 东京 | 24 | 22.0 | 否 | 39 | 29 | 0.050000 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
86 | 加纳 | 0 | 0 | 1 | 1 | 77 | GHA | 东京 | 0 | 1.0 | 否 | 1 | 1 | 0.000000 |
86 | 格林纳达 | 0 | 0 | 1 | 1 | 77 | GRN | 东京 | 0 | 1.0 | 否 | 1 | 1 | 0.000000 |
86 | 科威特 | 0 | 0 | 1 | 1 | 77 | KUW | 东京 | 0 | 1.0 | 否 | 1 | 1 | 0.000000 |
86 | 摩尔多瓦 | 0 | 0 | 1 | 1 | 77 | MDA | 东京 | 0 | 1.0 | 否 | 1 | 1 | 0.000000 |
86 | 叙利亚 | 0 | 0 | 1 | 1 | 77 | SYR | 东京 | 0 | 1.0 | 否 | 1 | 1 | 0.000000 |
92 rows × 14 columns
删除条件行¶
df.drop(df[df.金牌数<20].index)
国家奥委会 | 金牌数 | 银牌数 | 铜牌数 | 总分 | 按总数排名 | 国家奥委会代码 | 比赛地点 | 金银牌总数 | 最多奖牌数量 | 金牌大于30 | 金铜牌总数 | 银铜牌总数 | 金牌占比 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
金牌排名 | ||||||||||||||
1 | 美国 | 39 | 41 | 33 | 113 | 1 | USA | 东京 | 80 | 41.0 | 是 | 72 | 74 | 0.114706 |
2 | 中国 | 38 | 32 | 18 | 88 | 2 | CHN | 东京 | 70 | 38.0 | 是 | 56 | 50 | 0.111765 |
3 | 日本 | 27 | 14 | 17 | 58 | 5 | JPN | 东京 | 41 | 27.0 | 否 | 44 | 31 | 0.079412 |
4 | 英国 | 22 | 21 | 22 | 65 | 4 | GBR | 东京 | 43 | 22.0 | 否 | 44 | 43 | 0.064706 |
5 | 俄奥委会 | 20 | 28 | 23 | 71 | 3 | ROC | 东京 | 48 | 28.0 | 否 | 43 | 51 | 0.058824 |
On this page