本文章汇总了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)