dataframe的常用操作汇总

本文详细介绍了Pandas DataFrame的各种操作,包括创建、增删改查、分组、转置、排序、数据填充与处理,以及读写Excel和数据库。通过实例展示了如何高效地操作DataFrame,适用于数据分析师和Python开发者。
摘要由CSDN通过智能技术生成

本文章汇总了dataframe的一些常用操作,从创建该类型的数据,到数据的增删改取,以及存取excel的方法等,存在不足和遗漏,请谅解。

1.创建dataframe

使用列表创建

import pandas as pd
df = pd.Dataframe([1,2,3,4,5],
			      columns=['列名称'],
			      index=['a','b','c','d','e'])

使用字典创建

import pandas as pd
dic = {'key1':[1,2,3], 'key':[4,5,6]}
df = pd.Dataframe(dic)

2.增

增加列

df['列名称'] = list_data  # 增加新的一列
df.insert(3,'列名称',list_data)  # 在索引为3的位置插入新的一行

增加行

df.iloc[1] = list_data  # 在索引为1的位置插入行

合并dataframe

df = pd.merge(df1, df2, how='left', on=['key1', 'key2'])
df = df1.join(df2, on=['key1', 'key2'], how='inner')
df = df.append(df_new)
df = pd.concat([df1, df2])

3.删

删除列

df.drop('列名称', axis=1)  # 按列名删除某列
df = df[~df['列名称'].isin([0])]  # 删除某列数据为0的值(或理解为取出数据不为0的值)

删除行

df.drop(2)  # 删除存在数值为2的行
df[df['列名称'] > 100]  # 删除数据小于100的行(或理解为取出数据大于100的行)
df[~df['列名称'].str.contains('指定字符')]  # 删除某列中有指定字符的行

4.改

修改索引

df.columns=['name1', 'name2']  # 修改列索引名称

按列索引重新排序

df = df[['name1', 'name2']]  # 按列名称重新排序

替换

df['列名'].replace('待替换的内容', '替换的内容', inplace=True)  # 内容替换

5.取

取行 ——单行

df[1:2]  # 取第二行
df.loc['行名称']  # 取指定行
df[2, :]  # 取第三行

取行 ——多行

df.loc[['行名称1', '行名称2']]  # 取指定多行
df.iloc[:2, :]  # 取前两行

取列 ——单列

df['列名']  # 取指定列
df.列名  # 取指定列
df.iloc[:, 列序号]  # 取指定列

取列 ——多列

df['列名1', '列名2']  # 取指定多列
df.iloc[:, :3]  # 取前三列

取元素

df.loc['行名', '列名']  # 取指定行列的元素
df.iloc['行序号', '列序号']  # 取指定行列的元素

取多行多列

df.iloc[:2, :3]  # 取前两行,前三列
df.loc[['行名1', '行名2'], ['列名1', '列名2']]  # 取指定行列的元素

6.分组、转置、排序

df = df.groupby(['分组列'], as_index=False).mean()  # 分组
df.groupby(['分组列'], as_index=False)['列名'].agg(fun)  # 分组后自定义聚合函数
df.T  # 转置
df = pd.pivot_table(df, index='列索引', columns='行索引', values='值')  # 数据透视表
df.sort_values(by='排序标准', ascending=False, inplace=True)  # 按某列排序

7.数据填充与其它处理

df.fillna(0)  # 0填充缺失值
df['列名'] = df_data['列名'].astype('str').apply(lambda x: str(x).split(' ')[0])  # 数据变换与处理
df['新列名'] = df.apply(lambda df: df['列名1'] / df['列名2'], axis=1)
# print时需要显示所有列、行
pd.set_option('display.max_columns', None)  # 显示所有列
pd.set_option('display.max_rows', None)  # 显示所有行
pd.set_option('max_colwidth', 100)  # 设置value的显示长度为100,默认为50
df['列名'].unique().tolist()  # 对某列去重并排序
例如:[1,1,2,4,3,4,5]   -->   [1,2,3,4,5]

from itertools import groupby
list_data = [x[0] for x in groupby(df_hppc['列名'].to_list())]  # 对某列数据的每段连续重复值仅保留一个
例如:[1,22,333,22,11]   -->   [1,2,3,2,1]

8.按行迭代

for rindex in df.index:
	print('现在是第', rindex, '行')
	print(df.loc[rindex])
for r in df.values:
	print(r)
for rindex, row in df.iterrows():
		print('现在是第', rindex, '行')
		print(row)

9.读取与写入excel

df = pd.read_excel(path)  # 读取excel文件
df.to_excel(path, index=False)  # 写入excel文件

10.Dataframe数据入库

from sqlalchemy import create_engine

engine = create_engine('mysql+pymysql://用户名:密码@IP:端口/数据库名')
con = engine.connect()

# df看做已有的Dataframe数据
df.to_sql('表名称', con=engine, index=False, if_exists='replace')

11.Dataframe:元素结构处理

# 1.将float元素中的数据都转化为列表形式(应该有更好的办法,希望不吝在评论中指出)

import pandas as pd

# 构建一个dataframe
df = pd.DataFrame([[1, 2, 3, 4], [5, 6, 7, 8], [1, 4, 5, 2]], columns=['a', 'b', 'c', 'd'])

# 将元素类型转化为字符串,并添加中括号
df = df.astype('str')
df = df.apply(lambda x: '[' + x + ']')

# 将字符串元素(例如:'[1]')转化为列表
df = df.applymap(eval)

# 2.相反,如果要去除列表,保留元素值时
df = df.apply(pd.Series.explode)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值