pandas的一些基本功能

        这两天用pandas做数据分析时学习到一些技巧,在这里记录下来备以后使用。

目录

1 将从MySQL数据库中查询的结果转换为DataFrame类型

2 使用groupby函数以某一列为键计算另一列的平均值

3 使用lambda表达式执行逐元素操作

4 使用reset_index函数还原索引

5 使用head函数查看DataFrame中的前几条样本

6 使用shape属性查看DataFrame对象的形状

7 使用columns属性查看和修改DataFrame对象的列信息

8 使用merge函数进行两个DataFrame对象的连接

9 使用drop函数删除某列

10 使用concat对两个DataFrame对象进行拼接

11 使用drop_duplicates函数剔除重复样本

12 将DataFrame对象写入数据库


1 将从MySQL数据库中查询的结果转换为DataFrame类型

df1 = pd.DataFrame(list(results1), columns=['user_id', 'car_id'], dtype=np.int)

        注意这里要先把查询的结果用list()函数转化一下。

2 使用groupby函数以某一列为键计算另一列的平均值

import pandas as pd

# 车型维度评分信息
df1 = pd.DataFrame({'car_id': ['221', '222', '223', '224', '225', '227', '221'],
					'feature1': [1, 2.9333, 3, 4, 5, 6.3, 3],
					'feature2': [5, 4, 3, 2, 1, 9, None]})
print('df1:')
print(df1)
# 使用groupby函数执行聚合操作
df2 = df1.groupby('car_id').mean()
print('df2:')
print(df2)

        结果如下:

df1:
  car_id  feature1  feature2
0    221    1.0000       5.0
1    222    2.9333       4.0
2    223    3.0000       3.0
3    224    4.0000       2.0
4    225    5.0000       1.0
5    227    6.3000       9.0
6    221    3.0000       NaN
df2:
        feature1  feature2
car_id                    
221       2.0000       5.0
222       2.9333       4.0
223       3.0000       3.0
224       4.0000       2.0
225       5.0000       1.0
227       6.3000       9.0

3 使用lambda表达式执行逐元素操作

# 保留两位小数
f = lambda x: '%.2f' % x
# 使用aplymap函数执行逐元素操作
df3 = df2.applymap(f)
print('df3:')
print(df3)

        结果如下:

df3:
       feature1 feature2
car_id                  
221        2.00     5.00
222        2.93     4.00
223        3.00     3.00
224        4.00     2.00
225        5.00     1.00
227        6.30     9.00

4 使用reset_index函数还原索引

        对于使用groupby函数聚合后的DataFrame对象,其用于聚合的键会自动被设定为Index,我们可以使用reset_index函数将其还原为column,以df3为例:

# 使用reset_index函数还原索引
df4 = df3.reset_index()
print('df4:')
print(df4)

        结果如下:

df4:
  car_id feature1 feature2
0    221     2.00     5.00
1    222     2.93     4.00
2    223     3.00     3.00
3    224     4.00     2.00
4    225     5.00     1.00
5    227     6.30     9.00

        与之对应的是set_index函数,我们可以使用它将某一列或某几列设置为索引。

5 使用head函数查看DataFrame中的前几条样本

print('df4的前两条样本:')
print(df4.head(2))
print('df4的前5条样本:')
print(df4.head())

        结果如下:

df4的前两条样本:
  car_id feature1 feature2
0    221     2.00     5.00
1    222     2.93     4.00
df4的前5条样本:
  car_id feature1 feature2
0    221     2.00     5.00
1    222     2.93     4.00
2    223     3.00     3.00
3    224     4.00     2.00
4    225     5.00     1.00

6 使用shape属性查看DataFrame对象的形状

print('df4的形状:')
print(df4.shape)
df4的形状:
(6, 3)

7 使用columns属性查看和修改DataFrame对象的列信息

print('df4的列信息:')
print(df4.columns)
df4.columns = ['car_id', 'f1', 'f2']
print('更改列名之后的df4:')
print(df4)
print('更改列名之后df4的列信息:')
print(df4.columns)

        结果如下:

df4的列信息:
Index(['car_id', 'feature1', 'feature2'], dtype='object')
更改列名之后的df4:
  car_id    f1    f2
0    221  2.00  5.00
1    222  2.93  4.00
2    223  3.00  3.00
3    224  4.00  2.00
4    225  5.00  1.00
5    227  6.30  9.00
更改列名之后df4的列信息:
Index(['car_id', 'f1', 'f2'], dtype='object')

8 使用merge函数进行两个DataFrame对象的连接

df1 = pd.DataFrame({'user_id': ['111', '111', '112', '113', '113', '114'],
					'car_id': ['221', '222', '223', '224', '225', '227']})
print('df1:')
print(df1)
df2 = pd.DataFrame({'car_id': ['221', '222', '223', '224', '225', '227', '229'],
					'target_id': ['223', '221', '225', '225', '227', '221', '223']})
print('df2:')
print(df2)
df5 = pd.merge(df1, df2, on='car_id', how='left', left_index=True)        # 左连接
print('df5:')
print(df5)

        结果如下:

df1:
  user_id car_id
0     111    221
1     111    222
2     112    223
3     113    224
4     113    225
5     114    227
df2:
  car_id target_id
0    221       223
1    222       221
2    223       225
3    224       225
4    225       227
5    227       221
6    229       223
df5:
  user_id car_id target_id
0     111    221       223
1     111    222       221
2     112    223       225
3     113    224       225
4     113    225       227
5     114    227       221

9 使用drop函数删除某列

df5 = df5.drop(['car_id'], axis=1)
print('新的df5:')
print(df5)

        结果如下:

新的df5:
  user_id target_id
0     111       223
1     111       221
2     112       225
3     113       225
4     113       227
5     114       221

10 使用concat对两个DataFrame对象进行拼接

df1 = pd.DataFrame({'user_id': ['111', '111', '112', '113', '113', '114'],
					'car_id': ['221', '222', '223', '224', '225', '227']})
print('df1:')
print(df1)
df6 = pd.concat([df1, df5], axis=0)		# 沿着列方向拼接
print('df6:')
print(df6)

        结果如下:

df1:
  user_id car_id
0     111    221
1     111    222
2     112    223
3     113    224
4     113    225
5     114    227
df6:
  user_id car_id
0     111    221
1     111    222
2     112    223
3     113    224
4     113    225
5     114    227
0     111    223
1     111    221
2     112    225
3     113    225
4     113    227
5     114    221

11 使用drop_duplicates函数剔除重复样本

df6.drop_duplicates(subset=['user_id', 'car_id'], keep='first', inplace=True)		# 删除重复的行
print('剔除重复样本之后的df6:')
print(df6)

        结果如下:

剔除重复样本之后的df6:
  user_id car_id
0     111    221
1     111    222
2     112    223
3     113    224
4     113    225
5     114    227
0     111    223
2     112    225
4     113    227
5     114    221

12 将DataFrame对象写入数据库

        DataFrame对象为:

df8
        feature1 feature2
user_id                  
111         2.64     4.00
112         4.00     2.00
113         5.10     4.00
114         4.15     7.00

        使用以下语句将其写入数据库:

# 写入网络数据库
connect = create_engine('mysql+pymysql://user:passwd@ip:port/database_name?charset=utf8')
pd.io.sql.to_sql(df8, 'table_name', connect, schema='database_name', if_exists='append')
print('完成!!!')

        效果截图如下:

 

        待续...

        谢谢!

©️2020 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页