Pandas的使用
官网:
https://pandas.pydata.org/这里我提供一份关于中国主要城市GDP的csv文件
链接:https://pan.baidu.com/s/146UAVD_3c6pxiQnqLlopAA 提取码:jbqj
目录
1、写入数据 2、读取数据
3、数据集信息查询
4、数据统计 5、数据预处理
导入模块
import pandas as pd
1、写入数据
data = {'city': ['北京', '天津', '沈阳', '上海', '南京', '杭州', '合肥', '青岛', '郑州', '武汉', '长沙', '广州', '深圳', '重庆', '成都', '西安'],
'2018': [33105, 13362, 6292, 36011, 12820, 13509, 7822, 12001, 10143, 14847, 11003, 22859, 24221, 21588, 15342, 8349],
'2017': [28014, 18549, 5864, 30632, 11715, 12603, 7213, 11037, 9130, 13410, 10535, 21503, 22490, 19424, 13889, 7469],
'2016': [25669, 17885, 5546, 28178, 10503, 11313, 6274, 10011, 8113, 11912, 9356, 19547, 19492, 17740, 12170, 6257],
'2015': [23014, 16538, 7272, 25123, 9720, 10050, 5660, 9300, 7311, 10905, 8510, 18100, 17502, 15717, 10801, 5801],
'2014': [21330, 15726, 7098, 23567, 8820, 9206, 5157, 8692, 6776, 10069, 7824, 16706, 16001, 14262, 10056, 5492],
'2013': [19800, 14442, 7158, 21818, 8011, 8343, 4672, 8006, 6201, 9051, 7153, 15420, 14500, 12783, 9108, 4884],
'2012': [17879, 12893, 6602, 20181, 7201, 7802, 4164, 7302, 5549, 8003, 6399, 13551, 12950, 11409, 8138, 4366],
'2011': [16251, 11307, 5915, 19195, 6145, 7019, 3636, 6615, 4979, 6762, 5619, 12423, 11505, 10011, 6854, 3864],
'2010': [14113, 9224, 5017, 17165, 5130, 5949, 2701, 5666, 4040, 5565, 4547, 10748, 9581, 7925, 5551, 3241],
'2009': [12153, 7521, 4269, 15046, 4230, 5088, 2102, 4854, 3308, 4621, 3745, 9138, 8201, 6530, 4503, 2724],
'2008': [11115, 6719, 3860, 14069, 3775, 4781, 1664, 4436, 3003, 3960, 3000, 8215, 7806, 5793, 3900, 2190],
'2007': [9846, 5252, 3221, 12494, 3283, 4100, 1334, 3786, 2486, 3141, 2190, 7109, 6801, 4676, 3324, 1763],
'2006': [8117, 4462, 2519, 10572, 2773, 3441, 1073, 3206, 2013, 2590, 1798, 6073, 5813, 3907, 2750, 1473],
'2005': [6969, 3905, 2084, 9247, 2411, 2942, 853, 2695, 1660, 2238, 1519, 5154, 4950, 3467, 2370, 1270],
'2004': [6033, 3110, 1900, 8072, 1910, 2515, 589, 2163, 1377, 1956, 1133, 4115, 3422, 3034, 2185, 1095],
'2003': [5007, 2578, 1603, 6694, 1576, 2099, 484, 1780, 1102, 1662, 929, 3496, 2895, 2555, 1870, 941],
'2002': [4315, 2150, 1400, 5741, 1297, 1781, 412, 1518, 928, 1492, 812, 3001, 2256, 2232, 1667, 823],
'2001': [3707, 1919, 1236, 5210, 1150, 1568, 363, 1316, 828, 1347, 728, 2685, 1954, 1976, 1492, 733]
}
df = pd.DataFrame(data)
data.to_csv('中国主要城市2001-2018年GDP.CSV', encoding='gbk', index=False)
在当前目录下会生成一个中国主要城市2001-2018年GDP.CSV
2、读取数据
data = pd.read_csv('中国主要城市2001-2018年GDP.CSV', encoding='gbk', index_col='city')
print(data)
运行结果:
3、数据集信息查询
data.shape # 行数列数
data.dtypes # 所有列的数据类型
data['col_name'].dtype # 某一列的数据类型
data.index # 行索引
data.columns # 列索引
data.values # 对象值
数据维度
data.ndim
基本使用:
data = pd.read_csv('中国主要城市2001-2018年GDP.csv', encoding="gbk")
print(data.ndim)
运行结果:
列索引
data.columns
基本使用:
data = pd.read_csv('中国主要城市2001-2018年GDP.csv', encoding="gbk")
print(data.columns)
运行结果:
对象值
data.values
基本使用:
data = pd.read_csv('中国主要城市2001-2018年GDP.csv', encoding="gbk")
print(data.values)
运行结果:
整体情况查询
data.head() # 显示头部几行(默认5行)
data.tail() # 显示末尾几行(默认5行)
数据集相关信息概览:索引情况、列数据类型、非空值、内存使用情况
data.info()
基本使用:
快速综合统计结果
data.describe()
基本使用:
data = pd.read_csv('中国主要城市2001-2018年GDP.csv', encoding="gbk")
print(data.describe())
运行结果:
你也可以指定某列
例子:
data = pd.read_csv('中国主要城市2001-2018年GDP.csv', encoding="gbk")
print(data.describe().get('2018'))
运行结果:
也可以指定某列的某个统计值
data = pd.read_csv('中国主要城市2001-2018年GDP.csv', encoding="gbk")
print(data.describe().get('2018').get('mean'))
运行结果:
也可以进行切片
data = pd.read_csv('中国主要城市2001-2018年GDP.csv', encoding="gbk")
print(data.describe().get('2018')[:5])
运行结果:
4、数据统计
4.1、数据采样sample()
随机挑选数据
n:样本数
replace:样本有无更换(有无放回)(默认不放回)
weights:权重
基本使用:
data = pd.read_csv('中国主要城市2001-2018年GDP.csv', encoding="gbk")
print(data.sample(3, replace=True))
运行结果:
4.2 计算均值mean()
计算每列的均值
data = pd.read_csv('中国主要城市2001-2018年GDP.csv', encoding="gbk")
print(data.mean())
运行结果:
计算每行的均值
需要在读取数据的时候将city设置为索引
data = pd.read_csv('中国主要城市2001-2018年GDP.csv', encoding="gbk", index_col='city')
print(data.mean(axis=1))
4.3 计算便准差std()
基本使用:
data = pd.read_csv('中国主要城市2001-2018年GDP.csv', encoding="gbk")
print(data['2018'].std())
运行结果:
计算每列的标准差
data = pd.read_csv('中国主要城市2001-2018年GDP.csv', encoding="gbk")
print(data.std())
运行结果:
计算每行的标准差
需要在读取数据的时候将city设置为索引
data = pd.read_csv('中国主要城市2001-2018年GDP.csv', encoding="gbk", index_col='city')
print(data.std(axis=1))
运行结果:
axis为0时对列进行操作,为1时对行进行操作
4.4 计算方差var()
基本使用:
data = pd.read_csv('中国主要城市2001-2018年GDP.csv', encoding="gbk")
print(data['2018'].var())
运行结果:
计算每一列的方差
data = pd.read_csv('中国主要城市2001-2018年GDP.csv', encoding="gbk")
print(data.var())
运行结果:
计算每一行的方差
需要在读取数据的时候将索引设置为city
data = pd.read_csv('中国主要城市2001-2018年GDP.csv', encoding="gbk", index_col='city')
print(data.var(axis=1))
运行结果:
4.5 计算协方差cov()
基本使用:
data = pd.read_csv('中国主要城市2001-2018年GDP.csv', encoding="gbk")
print(data.cov())
运行结果:
4.6 计算相关性corr()
基本使用:
data = pd.read_csv('中国主要城市2001-2018年GDP.csv', encoding="gbk")
print(data.corr())
运行结果:
5、数据预处理
先创一个新的数据集
data2 = {'city': ['北京', '上海', '广州(粤语)', '深圳', np.nan],
'2018': [33105, 36011, 22859, 24221, np.nan]}
data2 = pd.DataFrame(data2)
5.1 查看异常值
for i in data2:
print(f'{i}:{data2[i].unique()}')
运行结果:
city:['北京' '上海' '广州(粤语)' '深圳' nan]
2018:[33105. 36011. 22859. 24221. nan]
可以看到city、2018这两列都有一个空值(方法unique()是去重)
5.2 空值检测/处理
检测isnull()
print(data2.isnull())
运行结果:
可以很直观的看到有两个空值
处理空值
1、直接删除包含空值的行
print(data2.drop([4]))
运行结果:
2、填充空值
value:用于填充的值,可以是具体值、字典和数组,不能是列表;
method:填充方法,有 ffill(填充上一个值)和 bfill(填充下一个值) 等
inplace默认为False(不修改原数据集),如果为True(则将修改原数据集)
方法一:填入上下的值
data2['city'].fillna(method='ffill', inplace=True)
print(data2)
运行结果:
方法二:填入指定的值
data2['2018'].fillna(value=data2.describe().get('2018').get('mean'), inplace=True)
print(data2)
运行结果:
5.3 大小写转换
data['列名'].str.title() # 将首字母大写
data['列名'].str.upper() # 全部大写
data['列名'].str.lower() # 全部小写
5.4 数据格式转换
先查看原本的数据类型
print(data2.info())
data2['2018'] = data2['2018'].astype('str')
print(data2.info())
运行结果:
成功的将2018这列的类型从float64转变为了object
5.5 更改列/行名
5.5.1、修改列
1、rename()
data2 = {'city': ['北京', '上海', '广州(粤语)', '深圳', np.nan],
'2018': [33105, 36011, 22859, 24221, np.nan]}
data2 = pd.DataFrame(data2)
print(data2.rename(columns={'city': '城市', '2018': 'GDP'}))
运行结果:
2、
data2 = {'city': ['北京', '上海', '广州(粤语)', '深圳', np.nan],
'2018': [33105, 36011, 22859, 24221, np.nan]}
data2 = pd.DataFrame(data2)
data2.columns = ['城市', 'GDP']
print(data2)
运行结果:
5.5.2、修改行
1、rename()
data2 = {'city': ['北京', '上海', '广州(粤语)', '深圳', np.nan],
'2018': [33105, 36011, 22859, 24221, np.nan]}
data2 = pd.DataFrame(data2)
data2.rename({0: 'a', 1: 'b', 2: 'c'}, inplace=True)
print(data2)
运行结果:
2、
data2 = {'city': ['北京', '上海', '广州(粤语)', '深圳', np.nan],
'2018': [33105, 36011, 22859, 24221, np.nan]}
data2 = pd.DataFrame(data2)
data2.index = list('abcde')
print(data2)
运行结果:
5.6 按照指定列的值排序
data2 = {'city': ['北京', '上海', '广州(粤语)', '深圳', np.nan],
'2018': [33105, 36011, 22859, 24221, np.nan]}
data2 = pd.DataFrame(data2)
print(data2.sort_values(by='2018', ascending=False)) # ascending默认为True,即升序
运行结果: