合并 (一)
1. 导入必要的库
import pandas as pd
import numpy as np
2. 从地址导入数据集cars1和cars2
cars1 = pd.read_csv("https://raw.githubusercontent.com/guipsamora/pandas_exercises/master/05_Merge/Auto_MPG/cars1.csv")
cars2 = pd.read_csv("https://raw.githubusercontent.com/guipsamora/pandas_exercises/master/05_Merge/Auto_MPG/cars2.csv")
3. 打印cars1、cars2的前五行
cars1.head()
cars2.head()
4. 看来我们的第一个数据集有一些空白列,删去那些列
cars1 = cars1.loc[:, "mpg":"car"]
cars1.head()
5. 每个数据集观测值的大小是多少?
print(cars1.shape)
print(cars2.shape)
6. 将cars1和cars2合并成一个DataFrame叫做cars
cars = cars1.append(cars2)
cars
# 这里的append使得在原有的cars1的行数中再添加cars2了
7. 产生一组随机的Series从15000到73000,名为nr_owners。
nr_owners = np.random.randint(15000, high=73001, size=398, dtype='l')
nr_owners
8. 将列nr_owners补充到中的car中,列名为owners
cars['owners'] = nr_owners
cars.tail()
合并 (二)
1. 导入必要的库
import pandas as pd
2. 创建3个数据集
raw_data_1 = {
'subject_id': ['1', '2', '3', '4', '5'],
'first_name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'],
'last_name': ['Anderson', 'Ackerman', 'Ali', 'Aoni', 'Atiches']}
raw_data_2 = {
'subject_id': ['4', '5', '6', '7', '8'],
'first_name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'],
'last_name': ['Bonder', 'Black', 'Balwner', 'Brice', 'Btisan']}
raw_data_3 = {
'subject_id': ['1', '2', '3', '4', '5', '7', '8', '9', '10', '11'],
'test_id': [51, 15, 15, 61, 16, 14, 15, 1, 61, 16]}
3. 将每个DataFrame赋值给变量data1,data2,data3
data1 = pd.DataFrame(raw_data_1, columns = ['subject_id', 'first_name', 'last_name'])
data2 = pd.DataFrame(raw_data_2, columns = ['subject_id', 'first_name', 'last_name'])
data3 = pd.DataFrame(raw_data_3, columns = ['subject_id','test_id'])
data3
4. 沿着行连接这两个数据集data1, data2,并分配给变量all_data
all_data = pd.concat([data1, data2])
all_data
# concat使得两个数据集合并起来
5. 沿着列将这两个数据集合并,并分配给变量all_data_col
all_data_col = pd.concat([data1, data2], axis = 1)
all_data_col
# axis 表示沿着列合并
6. 打印 data3
data3
7. 沿着subject_id值合并all_data和data3
pd.merge(all_data, data3, on='subject_id')
# on='subject_id'表示沿着subject_id
8. 在data1和data2上只合并具有相同“subject_id”的数据
pd.merge(data1, data2, on='subject_id', how='inner')
# 这里只有4、5是相同的subject_id
# how='inner'表示取交集
9. 合并data1和data2中的所有值,并在可能的情况下,将两边的记录进行匹配
pd.merge(data1, data2, on='subject_id', how='outer')
# 原有8行,匹配了1行,所以匹配后只有7行
合并 (三)
1. 导入必要的库
import pandas as pd
import numpy as np
2. 创建3个不同的系列,每个系列长度为100,如下所示:(1)第一个随机数为从1到4。(2)第二个随机数为从1到3。(3)第三个随机数为从10,000到30,000。
s1 = pd.Series(np.random.randint(1, high=5, size=100, dtype='l'))
s2 = pd.Series(np.random.randint(1, high=4, size=100, dtype='l'))
s3 = pd.Series(np.random.randint(10000, high=30001, size=100, dtype='l'))
print(s1, s2, s3)
3. 连接列来创建一个数据集
housemkt = pd.concat([s1, s2, s3], axis=1)
housemkt.head()
4. 将列的名称更改为bedrs, bathrs, price_sqr_meter
housemkt.rename(columns = {0: 'bedrs', 1: 'bathrs', 2: 'price_sqr_meter'}, inplace=True)
housemkt.head()
# .rename使得重命名
5. 用3个系列的值创建一个列的DataFrame,并将其赋值给‘bigcolumn’
bigcolumn = pd.concat([s1, s2, s3], axis=0)
bigcolumn = bigcolumn.to_frame()
print(type(bigcolumn))
bigcolumn
# axis=0使得以行来连接
# 它是一个Series,所以我们需要将它转换为一个数据集,因此要使用.to_frame()
6. 操作似乎只持续到索引99,这是真的吗?
len(bigcolumn)
7. 重新索引数据帧,使其从0到299
bigcolumn.reset_index(drop=True, inplace=True)
bigcolumn
# 不想保留原来的index,使用参数 drop=True,因此这里就不是原来的索引0-99而是索引0-299
# inplace:是否创建一个新的dataframe
更多《机器学习》,关注专栏 ♬ ♬
注:因为专栏不止我一位作者!