原文地址:https://www.kesci.com/home/project/5c418c295c4cef002c33940d/code注:代码是在Pycharm上写的。里面用到的数据来自国家统计局(http://data.stats.gov.cn/adv.htm?m=advquery&cn=E0105)。
import pandasas pd
df = pd.read_csv("2015年国内主要城市年度数据.csv")
# 4. 索引问题
# 单个索引,inplace=False 不覆盖的情况下,要使用一个变量 d 来间接操作
d = df.set_index(keys='年份', inplace=False)
print(d.iloc[:, :4].head())# 设置索引时的情况
# 注意在取消索引操作时,inplace=True 设置为 True,以便后面可以查看到取消后的情况
d.reset_index(inplace=True)
print(d.iloc[:, :4].head())# 取消索引时的情况
# 多级索引,inplace=True 覆盖的情况下,直接使用 df访问.
# 注意:在 inplace=True 覆盖原数据情况下,运行第 2 或多次,就会出现报错的情况,同时代码并没有语法错误,原因是原数据被覆盖了。
# 解决方法是:重新运行所有代码,如果不是很必要,尽量不要执行覆盖原数据的操作
df.set_index(keys=['地区', '年份'], inplace=True)# 设置多级索引,覆盖原数据
print(df.iloc[:, :4].head())
df.reset_index(inplace=True)
print(df.iloc[:, :4].head())
# 5. 排序问题
# 通过索引排序
data = df.sample(n=5, replace=False)# 通过随机不放回抽样 5 个数据
# 通过索引排列,升序排列、不覆盖原数据、如有缺失值则放在前面
data.sort_index(ascending=True, inplace=False, na_position='first')
print(df.head())
# 通过指定列的值排序
# 先以 "升序" 模式排完 "地区" 这一列,"年份" 这列再以 "地区" 列来排序
df.sort_values(by=['地区', '年份'], ascending=[True, False],inplace=False, na_position='first').head(7)
print(df.head())
# 6. 重复数据处理
# 返回唯一值
print('\n>>>', df['地区'].unique())# 唯一值元素
print('\n>>>\n', df.nunique())# 唯一值数量
# 重复值处理
# 查找重复值
print('\n>>>', df.duplicated(subset=['年份'], keep='first').head())
# 删除重复值
print('\n>>>', df.drop_duplicates(subset=['年份'], keep='first', inplace=False).iloc[:, :4])
# 查找重复索引
print('\n>>>', df.index.duplicated())