pandas数据处理大全(必备)

目录

pandas读取文件

import pandas as pd

'''读取txt文件为dataframe'''
df1 = pd.read_csv("./read.txt")

'''读取csv文件为dataframe'''
df2 = pd.read_csv('./read.csv')
#在读数之后自定义标题
df3 = pd.read_csv('./read.csv',header=None)
df3.columns=['列1','列2','列3','列4']
#读取csv文件中每行的前3列
df4=pd.read_csv('read.csv',usecols=[0,1,2,3])

'''读取excel文件为dataframe'''
df5=pd.read_excel('read.xlsx')#这个会直接默认读取到这个Excel的第一个表单
#通过指定表单名的方式来读取
df6=pd.read_excel('read.xlsx',sheet_name='sheet1')#可以通过sheet_name来指定读取的表单
#通过表单索引来指定要访问的表单,0表示第一个表单
df7=pd.read_excel('read.xlsx',sheet_name=[0,1])#可以通过表单名同时指定多个
data1=df7.values#获取所有的数据
#读取指定行
df8=pd.read_excel('read.xlsx')
data2=df8.ix[0].values#0表示第一行 这里读取数据并不包含表头
data3=df8.ix[[1,2]].values#读取指定多行
#读取指定列
df9=pd.read_excel('read.xlsx')
data4=df9['data'].values
#读取指定的多行多列值
df10=pd.read_excel('read.xlsx')
data5=df9.ix[1,2]#读取第一行第二列的值,这里不需要嵌套列表
data6=df10.ix[[1,2],['列1','列2']].values#读取第一行第二行的列1以及列2的值
#获取所有行的指定列
df11=pd.read_excel('read.xlsx')
data7=df11.ix[:,['列1','列2']].values#读所有行的title以及data列的值
#获取行号并打印输出
df12=pd.read_excel('read.xlsx')
print("输出行号列表:\n",df12.index.values)
#获取列名并打印输出
df13=pd.read_excel('read.xlsx')
print("输出列标题:\n",df13.columns.values)
#获取指定行数
df14=pd.read_excel('read.xlsx')
print("三行:\n",df14.sample(3).values)#这个方法类似于head()方法以及df.values方法
#pandas处理Excel数据成为字典
df15=pd.read_excel('read.xlsx')
data15=[]
for i in df15.index.values:#获取行号的索引,并对其进行遍历:
    #根据i来获取每一行指定的数据 并利用to_dict转成字典
    row_data=df15.ix[i,['列1','列2','列3','列4']].to_dict()
    data15.append(row_data)
print("最终获取到的数据是:\n",data15)

pandas存储文件

import pandas as pd
import os

file_path='./save.excel'
#python判断某个文件是否存在,如果存在则删除
if os.path.exists(file_path):
    os.remove(file_path)

'''写入txt文件, header=0不保存列名,index=0不保存行名'''
pd_data = pd.DataFrame(dataframe_data,columns=('列名1','列名2','列名3'))
pd_data.to_csv('./save.txt')

'''写入csv文件, header=0不保存列名,index=0不保存行名'''
pd_data = pd.DataFrame(dataframe_data,columns=('列名1','列名2','列名3'))
pd_data.to_csv('./save.csv',header=0,index=0)

'''写入excel文件, header=0不保存列名,index=0不保存行名'''
pd_data = pd.DataFrame(dataframe_data,columns=('列名1','列名2','列名3'))
pd_data.to_excel(file_path,sheet_name='sheet_1')
#文件连续写入,startcol代表起始行数、startrow代表起始列数
pd_data1 = pd.DataFrame(dataframe_data1,columns=('列名1','列名2','列名3'))
pd_data2 = pd.DataFrame(dataframe_data2,columns=('列名1','列名2'))
writer = pd.ExcelWriter(file_path)
pd_data1.to_excel(excel_writer=writer, sheet_name='sheet_1',startcol=1,startrow=1)
pd_data2.to_excel(excel_writer=writer, sheet_name='sheet_2',startcol=1,startrow=1)
writer.save()
writer.close()

pandas处理空值和缺失值

import pandas as pd
import numpy as np
df = pd.DataFrame({"name1": ['AAAAAA', None, 'CCCCCCC'],
                   "name2": [np.nan, '', 'DDDDDDD'],
                   "name3": [pd.NaT, pd.Timestamp("1999-01-01"),pd.NaT]})

#name1 列不为空,也不为空字符串的行
df1=df[(df['name1'].notna()) & (df['name1']!='')]  # 既要滤除缺失值,又要滤除空值
#删除空行
df2=df.dropna()
#删除空列
df3=df.dropna(axis=1)
#删除所有值全为缺失值的行
df4=df.dropna(how='all')
#删除至少出现过三个缺失值的行
df5=df.dropna(thresh=3)
#删除含有缺失值的行或列
df6=df.dropna(subset=['列1', '列2'])
#横向用缺失值前面的值替换缺失值
df7=df.fillna(axis=1,method='ffill')
#纵向用缺失值前面的值替换缺失值
df8=df.fillna(axis=0,method='ffill')
#缺失值替换
df9=df.fillna(999)
#不同的列用不同的值替换
df10=df.fillna(value={'列1':1,'列2':2,'列3':3})
#判断是否为缺失值或空值,返回都为布尔值
df11=df.isna()#缺失值
df12=df.isnull()#空值

pandas创建空dataframe

result =pd.DataFrame(columns=('列名1','列名1','列名3'))

dataframe索引值的修改

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(12).reshape((3,4)),index = ['one', 'two', 'three'],columns=('列名1','列名2','列名3','列名4'))

#修改行索引名和列索引名
df=df.reindex(index=['a','b','c'],columns=['a','b','c','d'])

dataframe选择行与列

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(12).reshape((3,4)),index = ['one', 'two', 'three'],columns=('列名1','列名2','列名3','列名4'))

#输出某一列
print("列名1 列为:\n",df["列名1"])
print("列名1=0.5 列为:\n",df.loc[df['列名1'] == 0.5])
#输出某一行
print("one 行为:\n",df.loc['one'])
print("列名1=0.5 列为:\n",df.loc[df['列名1'].isin(['one', 'two'])])
#输出多列
print("列名1,列名2 列为:\n",df[["列名1","列名2"]])
#输出多行
print("one,two 行为:\n",df.loc[['one','two']])
#输出多行-根据索引值
print("根据索引值为:\n",df.iloc[[0,1]])
#布尔型索引
print("布尔型索引为:\n",df[df>0.5])
print("布尔型索引为:\n",df[df != 0.5])
print("布尔型索引为:\n",df[df[["列名1", "列名2"]] > 0.5])
print("布尔型索引为:\n",df.loc[df['列名1'] != 0.5])
print("布尔型索引为:\n",df[(df['列名1']==0.5)& (df['列名2']==0.4)])

dataframe转置

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(25).reshape((5,5)))
print(df)

#转置
print(df.T)

dataframe添加数据

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(25).reshape((5,5)))

#指定添加一列,都为10
df['f'] = 10
#添加一行,都为5
df.loc[5]=5

dataframe修改数据

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(25).reshape((5,5)),columns=['q','w','e','r','t'])

#修改一列数据
df['q'] = 0
#修改一行数据
df.loc[5]=5
#修改多列
df[['q','w']] = 1
#修改多行
df.loc[[0,1]] = 2

dataframe删除数据

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(25).reshape((5,5)),columns=['q','w','e','r','t'])

#删除一列数据
del df['q']
#删除一列数据
df.drop('w', axis=1,inplace=True)
#删除一行数据
df.drop(0,inplace=True)

dataframe计算

import pandas as pd
import numpy as np
df1 = pd.DataFrame(np.random.rand(25).reshape((5,5)),columns=['q','w','e','r','t'])
df2 = pd.DataFrame(np.random.rand(9).reshape((3,3)),columns=['q','w','e'])

print("和为:\n",df1+df2)
print("差为:\n",df1-df2)
print("乘为:\n",df1*df2)
print("商为:\n",df1/df2)

dataframe排序

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(25).reshape((5,5)),columns=['q','w','e','r','t'])

#按照列标签等于q的那一列的值进行排序,默认从小到大 ascending=True升序,False降序
df.sort_values('q', ascending=False,inplace=True)
#按照列标签等于q和w列的值进行排序,默认从小到大 ascending=True升序,False降序
df.sort_values(['q','w'], ascending=False,inplace=True)
print(df)
#一行排序
df.sort_values(2, axis=1, ascending=False,inplace=True)
print(df)
# 按索引排序,按行名进行降序  ascending=False 降序
df.sort_index(ascending=False,inplace=True)
print(df)
# axis=1 按列名排序
df.sort_index(axis=1,ascending=False,inplace=True)
print(df)

dataframe删除重复的行数据

import pandas as pd
import numpy as np
df= pd.DataFrame(np.random.rand(25).reshape((5,5)),columns=['q','w','e','r','t'])

#删除所有完全重合的行
df.drop_duplicates()
#删除q列和w列重复的行
df.drop_duplicates(['q','w'])

dataframe合并

import pandas as pd
import numpy as np
df1 = pd.DataFrame(np.random.rand(25).reshape((5,5)),index = ['one', 'two', 'three','four','five'],columns=('列名1','列名2','列名3','列名4','列名5'))
df2 = pd.DataFrame(np.random.rand(16).reshape((4,4)),index = ['one', 'two', 'three','four'],columns=('列名1','列名2','列名3','列名4'))
df3 = pd.DataFrame(np.random.rand(9).reshape((3,3)),index = ['one', 'two', 'three'],columns=('列名1','列名2','列名3'))

#dataframe纵向合并,忽略纵向索引值,函数默认join='outer'
res1 = pd.concat([df1, df2], axis=0, ignore_index=True,join='outer')
#dataframe横向合并,忽略横向索引值,函数默认join='outer'
res2 = pd.concat([df1, df2], axis=1, ignore_index=True,join='outer')
#dataframe纵向合并,忽略纵向索引值,join='inner',相同的索引值合并,不同的删除
res3 = pd.concat([df1, df2], axis=0,join='inner')
#dataframe横向合并,忽略横向索引值,join='inner',相同的索引值合并,不同的删除
res4 = pd.concat([df1, df2], axis=1,join='inner')
#将df2合并到df1的下面,以及重置index
res5 = df1.append(df2, ignore_index=True)
#合并多个df,将df2与df3合并至df1的下面,以及重置index
res6 = df1.append([df2, df3], ignore_index=True)

dataframe按照关键字分类

import pandas as pd
import numpy as np
df = pd.DataFrame({'key1':['a','a','b','b','a'],'key2':['one','two','one','two','one'],'data1':np.random.randn(5),'data2':np.random.randn(5)})

#按照关键字分类
res1=df.groupby('key1').mean()
res2=df.groupby('key1').apply(np.mean)
group=df.groupby('key1')#group类型
res3=group['data1'].agg('mean')
#按照多关键字分类
res4=df.groupby(['key1','key2']).mean()

dataframe透视表

import pandas as pd
import numpy as np
df = pd.DataFrame({'key1':['a','a','b','b','a'],'key2':['one','two','one','two','one'],'data1':np.random.randn(5),'data2':np.random.randn(5)})

#透视表
res1=pd.pivot_table(df, index='key1', columns='key2')
res2=df.pivot_table(['data1'], index='key1',columns='key2')

dataframe替换,更改列的数据类型

import pandas as pd
import numpy as np
df = pd.DataFrame({'key1':['a','a','b','b','a'],'key2':['one','two','one','two','one'],'data1':np.random.randn(5),'data2':np.random.randn(5)})

#替换
df1 = df['data1'].replace(0.5, 0) #将data1一列中0.5的数替换成0
df2 = df['data1'].replace([0.1,0.2,0.3,0.4,0.5], 0) #将data1一列中某些数替换成0
#替换
if df['实发工资']>0.5:
    df['实发工资']=df['应发工资']+20000
#更改列的数据类型
df=pd.DataFrame(df,dtype='float')
  • 3
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值